天天看點

同樣指令bmp.LockBits不同平台(Windows/WinCE)擷取位圖的資料不同

最近做了一個擷取位圖(24位位圖)資料的程式,代碼如下:

Bitmap bmp = new Bitmap(BmpFile);

  //擷取位圖的資料 

System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

//獲得位圖資料的初始位址

IntPtr ptr = bmpData.Scan0;

//位圖資料

int bytes = bmp.Width * bmp.Height * 3;

byte[] bytData = new byte[bytes];

//拷貝位圖資料到位元組數組

System.Runtime.InteropServices.Marshal.Copy(ptr, bytData, 0, bytes);

//資料處理

//... ...

//拷貝位元組數組資料到位圖

System.Runtime.InteropServices.Marshal.Copy(bytData, 0, ptr, bytes);

//更新圖檔資料

bmp.UnlockBits(bmpData);

該程式用VS2005+.net精簡架構集開發,在PC機Windows平台上運作該程式擷取圖檔資料正常,把同樣的程式拷貝到WinCE 4.2(含.net 精簡架構集2.0)運作,雖然也擷取到位圖資料,但資料與上位機的有所不同,RGB顔色被調整,如9會變成8之類。我以為是系統設定為16位色的緣故,我在PC機設為16位色,但取資料正常。

最後我隻能用正常讀寫檔案的方法,直接從檔案中擷取資料,才能保證上下位機系統同時運作正常。

繼續閱讀