2011-05-31 56 views
2

我是C#的新手,我試圖從原始二進制流生成圖像。該文件是純二進制文件,擴展名爲.bin,以8 bpp 2-2-2-2格式編碼;它包含每個RGB顏色2位和不透明度2位。我還沒有嘗試過任何東西,因爲我真的不知道從哪裏開始;我搜索了之前發佈的問題,但沒有找到有用的東西。我的應用程序將接收一個串行流,並且我必須從文件中爲每個像素使用一個字節生成800 x 600圖像。任何想法至少會讓我開始?如何將2-2-2-2格式的原始二進制圖像轉換爲C#中的位圖?

+0

想要顯示圖像還是要將其保存回光盤?如果你想顯示它,你是使用WinForms還是WPF? – 2011-05-31 17:03:24

回答

1

我會從這樣的事情開始。

public void ImageTest() 
{ 
    var bitmap = new Bitmap(800,600); 
    var stream = new BinaryReader(new FileStream("pathtofile",FileMode.Open)); 
    byte currentbyte; 
    int x = 0; 
    int y = 0; 
    while((currentbyte = stream.ReadByte()) != EndOfImageMarker) 
    { 
     bitmap.SetPixel(x,y,DecodeByteToColor(currentbyte)); 
     x++; 
     y++; 
     if (x == 799)//next line 
     { 
      x = 0; 
     } 
     if (y == 599) 
     { 
      break; 
     } 
    } 
    bitmap.Save("Path to new file..."); 
} 

private Color DecodeByteToColor(byte currentbyte) 
{ 
    const int adjustment = 10; 
    var red = (currentbyte & 0x3) * adjustment; 
    var green = (currentbyte << 2 & 0x3) * adjustment; 
    var blue = (currentbyte << 4 & 0x3) * adjustment; 
    var alpha = (currentbyte << 6 & 0x3) * adjustment; 
    return Color.FromArgb(red, green, blue, alpha); 
} 

它已經有一段時間了,因爲做位移的東西我可能會讓操作員從你需要的東西后退。目的是要抓住前兩位,並將其轉移到接下來的兩位。調整將決定每轉換一次全部值的每個位的顏色。

+0

位移是反向的,調整應該是0x01010101。否則,這應該工作(儘管緩慢,「Bitmap.LockBits」會比許多對「Bitmap.SetPixel」的調用快得多)。 – 2011-05-31 19:04:38

相關問題