最近做了一個擷取位圖(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位色,但取資料正常。
最後我隻能用正常讀寫檔案的方法,直接從檔案中擷取資料,才能保證上下位機系統同時運作正常。