.Net和Java不一樣,C# .Net 整數轉換竟然是倒轉的陣列?!

參考網路上的文章寫了一個擷取像素值的程式,沒想到裡面錯誤連連。

最後終於發現,原來Microsoft的像素擷取後的位元陣列byte[]竟然轉換int時是倒轉的方向!

難怪一錯好久!果然.Net和Java不一樣!

public static void RGBtoInt(Bitmap srcBitmap) {
int wide = srcBitmap.Width;
int height = srcBitmap.Height;
System.Drawing.Rectangle rect = new System.Drawing.Rectangle(0, 0, wide, height);
//將srcBitmap鎖定到系統內的記憶體的某個區塊中,並將這個結果交給BitmapData類別的srcBimap
BitmapData srcBmData = srcBitmap.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

//位元圖中第一個像素數據的地址。它也可以看成是位圖中的第一個掃描行
//目的是設兩個起始旗標srcPtr,為srcBmData的掃描行的開始位置
System.IntPtr srcScan = srcBmData.Scan0;
unsafe {//啟動不安全代碼
byte* srcP = (byte*)(void*)srcScan;
int srcOffset = srcBmData.Stride – wide * 3;
byte red, green, blue;
for (int y = 0; y < height; y++) {
for (int x = 0; x < wide; x++, srcP += 3 ) {
blue = srcP[0];
green = srcP[1];
red = srcP[2];
int i = BitConverter.ToInt32(new byte[] { 0x50, 0x30, 0x10, 0xff }, 0);
int j = Color.FromArgb( 0xff, 0x10, 0x30, 0x50 ).ToArgb();
Console.Writeline( i + " “+ j );

}
srcP += srcOffset;
}
}
srcBitmap.UnlockBits(srcBmData);
}

廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s