在试图更好地理解Bitmap和锁定位的所有属性的同时,我创建了一个10x1px映像,具有以下属性:
Pixel format:Format24bppRgb
指定格式为每像素24位;红色、绿色和蓝色组件各使用8位。
Color depth in bits: 24 (3 bytes)
这意味着我有10个像素,每个像素需要3个字节,这意味着我需要创建一个长度为30的字节数组,以便使用:Marshal.Copy(lockedBitmapData.Scan0, bytesArray, 0, 30);复制所有图像数据。
步幅是一行像素的宽度(一条扫描线),四舍五入到一个四字节的边界。
这是否意味着当我访问BitmapData.Stride时,它总是返回一个整数,就好像PixelFormat是32bit变体之一一样?
为什么下面的代码会导致两个额外的字节,即0,而不是10,即0?或者它是2,因为它将30字节乘以32作为最近的字节长度,可以被4除以,正如doc所说的那样?我想我误解了文档,并期望它在计算步幅时为每个像素计算4个字节。
byte[] bytesArray = new byte[lockedBitmapData.Stride];
Marshal.Copy(lockedBitmapData.Scan0, bytesArray, 0, lockedBitmapData.Stride);发布于 2020-02-09 17:05:55
https://stackoverflow.com/questions/60138664
复制相似问题