C++和VC++.NET中与图像处理有关的几个概念、结构和类 收藏
最近一直在看VC++有关图像处理方面的书,终于把以前一直混淆的几个概念、结构和类弄清楚了,特整理如下。如有错误,请大家批评指正,不胜感激。下一步想好好学****学****Open以为图像的柔化和锐化处理提供一种可能。这些功能和MFC的新类CImage功能基本一样,如果仅用于图像的读取与显示,用Bitmap类或Image类是不错的选择,如果是做图像处理,则CImage可能更符合MFC程序员的编程****惯。
四、CImage类
CImage类是VC++.NET中MFC和ATL共享的新类,它能从外部磁盘中调入一个JPEG、GIF、BMP和PNG格式的图像文件加以显示,而且这些文件格式可以相互转换。
CImage既能处理DIB位图也能处理非DIB位图,但你可以仅用DIB位图来Create或CImage::Load。你也可以使用Attach把一个非DIB位图连接给CImage对象,但你不能使用下列方法,这些方法仅支持DIB位图:GetBits、GetColorTable、GetMaxColorTable、Entries、GetPitch、GetPixelAddress、IsIndexed、SetColorTable。要确定一个连接的位图是否是一个DIB位图,调用IsDibSection。
由于CImage在不同的Windows操作系统中其某些性能是不一样的,因此在使用时要特别注意。例如,CImage::PlgBlt和CImage::MaskBlt只能在 Windows NT 或更高版本中使用,但不能运行在Windows 95/98 应用程序中。CImage::AlphaBlend和CImage::TransparentBlt也只能在 Windows 2000/98或其更高版本中使用。即使在Windows 。 CImage可以在MFC或ATL中使用。当使用CImage创建一个项目时,。
CImage封装了DIB(设备无关位图)的功能,因而可以让我们能够处理每个位图像素。
CImage提供了HBITMAP操作符,因此HBITMAP为参数的地方,都可以用CImage来替代。
五、传统的VC++中的图像处理方法与VC++.NET中的图像处理方法
由于DIB图不依赖于具体设备,因此可以用来永久性地保存图象。DIB一般是以*.BMP文件的形式保存在磁盘中的,有时也会保存在*.DIB文件中。运行在不同输出设备下的应用程序可以通过DIB来交换图象。因而在数字图象处理中会经常用到DIB位图。
DIB还可以用一种RLE算法来压缩图像数据,但一般来说DIB是不压缩的。
在VC++.net之前MFC未提供现成的类来封装DIB,这给MFC用户带来很多不便。因为用户要想使用DIB,首先应该了解DIB的结构。
在内存中,一个完整的DIB由两部分组成:一个BITMAPINFO结构和一个存储像素阵列的数组。BITMAPINFO描述了位图的大小,颜色模式和调色板等各种属性,其定义为
typedef struct tagBITMAPINF
中与图像处理有关的几个概念结构和类(2) 来自淘豆网www.taodocs.com转载请标明出处.