PVOID ptr;
ptr = CaptureSingle(xxxx);//采集一幅图像
unsigned char* pcolor = (unsigned char*)ptr;
查看了下,指针指向内存的内容为16进制的,1个字节一个子像素
接下来 我该如何把内存中的RGB值放在RGB()这个宏中??
对于指针里面的内容我不知道该如何取出,而且为0到255的值。
ptr = CaptureSingle(xxxx);//采集一幅图像
unsigned char* pcolor = (unsigned char*)ptr;
查看了下,指针指向内存的内容为16进制的,1个字节一个子像素
接下来 我该如何把内存中的RGB值放在RGB()这个宏中??
对于指针里面的内容我不知道该如何取出,而且为0到255的值。
开始的数据对应图像后面的数据,即首先保存的是图像最后一行的颜色,然后再保存倒数第二行,倒数第三行,... ,第一行
每一行是从左到右保存的,每个像素的颜色分别是r、g、b,即第一个字节是红色,第二个字节是绿色,第三个字节是蓝色,一行的数据像下面这样
r1g1b1r2g2b2r3g3b3...总体的图像如下(假设总行数为y,总列数为x):r(y1)g(y1)b(y1)r(y2)g(y2)b(y2) ... r(yx)g(yx)b(yx)
... ...
r(21)g(21)b(21)r(22)g(22)b(22) ... r(2x)g(2x)b(2x)
r(11)g(11)b(11)r(12)g(12)b(12) ... r(1x)g(1x)b(1x)
PVOID ptr;
ptr = CaptureSingle(xxxx);//采集一幅图像
unsigned char * pcolor = (unsigned char*)ptr;
RGB m_rgb(pcolor >> 16;pcolor++ >> 8;pcolor++);
RGB m_rgb1(pcolor++ >> 16;pcolor++ >> 8;pcolor++);
依次类推,知道pcolor移动到 ptr的结尾。
2、如果图像是RGB32位的。
PVOID ptr;
ptr = CaptureSingle(xxxx);//采集一幅图像
unsigned char * pcolor = (unsigned char*)ptr;
RGB m_rgb(pcolor >> 24;pcolor++ >> 16;pcolor++ >>8);
pcolor++//跳过alpha字节。
RGB m_rgb1(pcolor++ >> 24;pcolor++ >> 16;pcolor++ >>8);
pcolor++//跳过alpha字节。
依次类推,知道pcolor移动到 ptr的结尾。 3、如果图像是16位灰度图。
PVOID ptr;
ptr = CaptureSingle(xxxx);//采集一幅图像
unsigned char * pcolor = (unsigned char*)ptr;
RGB m_rgb(pcolor >> 8;((pcolor++) & 0x1100) >> 2;((pcolor++) & 0x11) );
RGB m_rgb1(pcolor++ >> 8;((pcolor++) & 0x1100) >> 2;((pcolor++) & 0x11) );
依次类推,知道pcolor移动到 ptr的结尾。
跳过alpha字节 --》跳过alpha bit