我有一种方法可以将数据从 System.Drawing.Bitmap 中复制出来,如下所示:
var readLock = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
byte[] data = new byte[3 * image.Width * image.Height];
if (data.Length != readLock.Stride * readLock.Height)
throw new InvalidOperationException("Incorrect number of bytes");
Marshal.Copy(readLock.Scan0, data , 0, data.Length);
image.UnlockBits(readLock);
非常简单,它适用于我的大多数图像。但是对于非常小的图像(14x14),它会遇到异常。在失败的情况下,Stride 是 44,而不是预期的 42 (14 * 3)。
像素格式为 Format24bppRgb,因此图像中的每个像素应该有 3 个字节。这些额外的字节来自哪里,在处理图像数据时如何处理它们?
对于任何感兴趣的人,我正在从高度图生成法线数据,因此我需要能够准确地获取每个像素及其邻居)。