我正在使用锁定位图后可用的BitmapData
读取位图的像素数据。我正在使用的方法单独读取每个颜色字节,并且比在给定指针处直接读取4字节int
要慢。但不幸的是我的位图是24bpp,这意味着每个像素有3个字节,而不是4.那么有没有办法快速读取3个字节并将其转换为给定指针地址的int
?
// read pixel color
byte* Pix = (byte*)bmpScan0 + (y * bmpStride) + (x * 3);
byte R = *(Pix + 2);
byte G = *(Pix + 1);
byte B = *(Pix);
int RGB = ((int)R << 16) | ((int)G << 8) | (int)B;
答案 0 :(得分:2)
而不是多个操作 - 读取,屏蔽等 - 您可以在像素的地址读取一个完整的int并屏蔽掉额外的字节。
int Pix = *(int*)((byte*)bmpScan0 + (y * bmpStride) + (x * 3)) & 0x00FFFFFF;
根据您的字节顺序,您可能需要向下移动而不是屏蔽,并且颜色分量可能会反转 - BGR而不是RGB。
哦,由于从未与4字节边界对齐的内存中读取,您可能会遇到一些速度问题。你可以解决这些问题,但解决方案通常比最初的问题更糟糕。
答案 1 :(得分:-1)
你的意思是:
int foo = *(some pixel address in memory);
byte R = (byte)(foo & 0xff0000 >> 16);
byte G = (byte)(foo & 0x00ff00 >> 8);
byte B = (byte)(foo & 0xff);
编辑:应保留未经编辑的答案,以保持其他评论的连续性,但不再适用于对问题本身的编辑。 :)