Visual C++ 2005图像编程之预备知识

http://tech.ddvip.com   2008年08月29日    社区交流

本文详细介绍Visual C++ 2005图像编程之预备知识

  4、贴图的效率

  很多初学图像编程的朋友几乎都遇到贴图闪烁的问题。我们最常用的方法就是双缓冲贴图。基本的代码片断:

//pDC是最后图像显示的目标窗口DC,pMemDC是内存中的临时DC
CDC *pMemDC = CreateCompatibleDC(pDC);
CBitmap Bitmap;
//Width、Height是图像最后显示的目标窗口高度和宽度
Bitmap. CreateCompatibleBitmap(pDC, Width, Height);
pMemDC->SelectObject(&Bitmap);

  然后我们就可以在pMemDC上进行任何需要的画图操作,画完后再贴到目标窗口DC

pDC->BitBlt(0, 0, Width, Height, pMemDC, 0, 0, SRCCOPY);
pMemDC->DeleteDC();

  在有的时候我们需要进行大量的贴图,贴很多不同的小的图片时,需要注意SelectObject函数的调用,频繁的调用这个函数选入不同的各种画图属性会大大降低程序的速度。

  避免一些不必要的重画,在完成自己的画图后,可以禁止系统的画图过程来避免闪烁:在WM_ERASEBKGND消息函数里直接返回TRUE,不再继续调用基类的消息处理函数。需要重画时进行精确的更新,而不是盲目的将所有的内容都重画,如调用InvalidateRect来代替过渡的Invalidate调用过程。因为计算Rect的时间比重画那些不需要重画的内容所消耗的时间要少得多。

  在图像处理过程中,还有许多方面需要我们特别注意,我会在后面的部分做进一步的讨论。

  5、颜色空间(Color Space)及转换

  5.1、颜色空间介绍

  颜色空间就是把我们表示颜色的各个组件映射到笛卡儿的二维或者三维坐标系中。简单一点就是我们如何用几个颜色组合来表示自然界所有的颜色。

  (1)、RGB颜色空间

  用R(Red)、G(Green)、B(Blue)三种颜色组合可以表示自然界所有的颜色,也称为加色系统。因为我们把RGB范围类的值相加可以产生任何的颜色。假设图像没有其他颜色都是黑色(RGB=0),然后我们往图片上加上不同的RGB值颜色,就可以产生不同的色彩,下面的图1-2表示了RGB系统是如何相加混合颜色的。

责编:豆豆技术应用

正在加载评论...