我网上找了一个例子,可以通过视频采集设备来保存BMP或者AVI。程序是基于DIALOG的。可以显示出来当前的捕捉的影象。
我现在想在这个影象显示的范围内,按照一定的规律(间隔一定的像素)来取出来当前像素点的颜色。保存成COLORREF类型的。
目的是把当前一帧的保存下来。然后在保存下一帧 2帧的数据做一些对比。我想问一下要如何才能把影象区域的颜色都保存下来,难道我采多少个点,就要定义多少个COLORREF变量么? 用什么方式保存比较快捷?哎~~问题自己都觉得有些傻,见谅。 或者有没有其他方便的方法,请指点一下。谢谢。我会继续加分的。目前就这么多了

解决方案 »

  1.   

    COLORREF 就是一个像素的颜色的四个分量。要表示多个像素,就要定义多个。于是自然需要用数组。
      

  2.   

    哦。数组。那请问一下,这个数组怎么定义呢?
    比如我默认要采集10X10个点。是否可以在程序中设置要采集的点呢?20X20 100X100?
    谢谢!
      

  3.   

    比如8位色,宽100,高103的位图就只需要100×104的BYTE(字节)数组来存储就可以了。
    16位色,宽100,高100的位图就需要200×100的字节数组来存储。
    在采集数据的时候,可以按一定的间距提取象素,以提高比较速度和效率。
    比如一个16位色,宽100,高100的位图,可以间隔1列进行抽取,数组大小就可以缩小为100×100个字节。
      

  4.   

    ddmor(小明) 
    采集的图象是通过摄像头采集到的,然后显示在DIALOG的一个区域内。RGB(255,255,255)这个应该就是8位色的吧。我仔细看了你写给我的。一个字节只能保存0-255吧?这样保存出来的不是成了灰度的颜色数据了么?还是我理解错误了?
      

  5.   

    还有个问题,根据需求,那个间隔的距离是能调节的。比如我图象区域是300X300 我间隔10就要定义[30][30]是在程序中固定下来的。如果调节成间隔5 那就要[60][60]
    这个可以调节么?我以前好象实验用 int abc[x][y] 好象不能通过啊
      

  6.   

    也可以,保存成灰度的颜色,这样也可以。再问个问题,RGB颜色如何转换成灰度颜色?把R+G+B /3么?
      

  7.   

    数组的大小可以动态分配,根据你的要求可以如下写:
    int nRow;              //定义行数
    int nCol;              //定义列数
    nRow = 图像区域宽度 / 间隔;
    nCol = 图像区域高度 / 间隔;
    COLORREF* pColor = new COLORREF[nRow * nCol];       //注意必须用数组
    //要访问第n行第m列的颜色值如下:
    pColor[n * nRow + m];对于转换为灰度图,可以用R+G+B /3,但通常还会考虑不同颜色分量的权重。
      

  8.   

    一个COLORREF变量其实就是4字节的long,用来完整的描述32位真彩色,而一般用到16位色就可以了。RGB一般分别5,6,5位。
      

  9.   

    在位图的象素数组中,8位色(256色)一个象素占一个字节,16位色(65535色)一个象素占2个字节,32位色一个象素占4个字节。这个不要搞COLORREF混在一起了。