下圖顯示了轉換大小爲1x2的24位彩色圖像時發生的情況。無論顏色深度如何,圖像都佔用相同的字節數
。
下圖顯示了轉換大小爲1x2的32位彩色圖像時發生的情況。
我想,24位圖像將佔據6個字節。但是,兩者都佔用8個字節。
因此,我的C#代碼失敗。因爲它假定像素需要(ColorDepth/8)*Width*Height
字節數。
public static int[,] ToInteger(Bitmap bitmap)
{
BitmapLocker locker = new BitmapLocker(bitmap);
locker.Lock();
byte[] data = locker.ImageData;
int Width = locker.Width;
int Height = locker.Height;
int noOfBytesPerPixel = locker.BytesPerPixel;
int[,] integerImage = new int[Width, Height];
int byteCounter = 0;
for (int i = 0; i < Width; i++)
{
for (int j = 0; j < Height; j++)
{
int integer = BitConverter.ToInt32(data, byteCounter);
integerImage[i, j] = integer;
byteCounter += noOfBytesPerPixel;
}
}
locker.Unlock();
return integerImage;
}
那麼,究竟發生了什麼呢?
也許它的內存對齊方式:https://en.wikipedia.org/wiki/Data_structure_alignment –
看看[步幅](http://stackoverflow.com/questions/24595836/size-of-bitmap-byte-differs-從BMP-MemoryStream的尺寸/ 24595963#24595963)! – TaW