CxImage类---函数的简单说明

来源:互联网 发布:处理器性能优化 编辑:程序博客网 时间:2024/05/22 10:25


一、CImage类的成员可分为连接与创建、输入与输出、位图类型与参数,以及图形绘制与位图块传送等4类。
(1) 连接与创建
Attach 将一个DIB(或DDB)位图与CImage对象相连接
Detach 位图与CImage对象相分离
Create 创建一个DIB位图并将它与已有CImage对象相连接
Destroy 位图与Cimage对象相分离并删除
(2) 输入与输出
GetImporterFilterString 返回系统支持的输入文件格式类型及其描述
GetExporterFilterString 返回系统支持的输出文件格式类型及其描述
Load 读入指定图像文件中的图像
LoadFromResource 读入指定资源文件中的图像
Save 按指定类型保存图像,文件名中不能省略后缀
IsNull 判别源图像文件是否已经读入
(3) 位图类型与参数
GetWidth 返回当前图像的宽度(以像素为单位)
GetHeight 返回当前图像的高度
GetBPP 返回当前图像的每像素位数
GetBits 返回当前图像像素数据的指针
GetPitch 返回相邻两行像素首地址之间的间隔 -------------好像没有这个函数????????
GetPixelAddress 返回指定像素数据存放位置的存储地址
GetMaxColorTableEntries返回调色板单元数
IsDibSection 确定位图是否为DIB位图
IsIndexed 判别位图中是否有调色板
IsTransparencySupported判别应用程序是否支持透明位图
AlphaBlend 是否支持透明或半透明显示的状态
(4) 图形绘绘与位图块传送
GetDC 返回当前位图的设备描述表
ReleaseDC 释放设备描述表
GetPixel 返回指定位置像素的颜色
SetPixel 设置指定位置像素的颜色
SetPixelIndexed 设置指定位置像素颜色的索引值
SetPixelRGB 设置指定位置像素的红绿蓝分量
GetColorTable 获取调色板颜色分量(红、绿、蓝)值
SetColorTable 设置调色板颜色分量(红、绿、蓝)值
SetTransparentColor 设置透明颜色的索引值,只能有一种颜色可为透明
Draw 从源矩形复制到目标矩形,支持伸缩、a融合与透明
BitBlt 位图的一个举行区域复制到另一位图上的制定区域
MaskBlt 为图块传送时须与指定的模板图像做逻辑操作
PlgBlt 为图的矩形区域到另一位图上平行四边形间的位块传输
StretchBlt 从源矩形复制到目标矩形,支持伸缩
TransparentBlt 位图块传送时复制带透明色的位图


FAQ:
1. 关于GetBits()函数的使用.对于一幅DIB图像来说,图像的左下角为像素数据的起点。通常我们会认为GetBits()函数返回的是图像左下角的数据指针,但是CImage实现却不是这样。GetBits()返回的是图像左上角的像素数据指针。从这个角度上来讲,它的功能等效于函数 GetPixelAddress(0,0)调用。而且CImage的成员函数中坐标是以左上角为坐标原点来表示的。

   2. 关于SetPixelIndexed()函数的使用. 从函数名我们可以得知,该函数应该应用于非真彩色图像,特别是8位的图像。在测试该函数时,发现应用于8位BMP图像时,不管设置什么索引值,操作后的结果显示索引值变成了0。这个现象确实让人匪夷所思。不知道是不是CImage类的该函数设计有问题。当然,如果将它不合理地应用于真彩色图像,操作的结果还是黑色。

   3. 另外,CImage类中还有一些函数,譬如SetPixel()和SetPixelRGB()函数,理论上应该将它们应用于真彩色图像,但是如果强硬的将它们应用于非真彩色图像(测试中将它们应用于8位BMP图像),操作结果显示设置的值都会被“合理”的变成灰阶数据,比如说,如果我们设置RGB值为 (180,0,0),操作结果为调色板里的数据变为RGB(60,60,60).
  
4. 直接调用CImage类的GetPixel和SetPixel效率是很低的, 如果要循环遍历所有Pixels的话,需要用GetPixelAddress直接取得像素数据的存储地址, 然后进行操作。这种方法有个问题: How to handle the PixelAddresses correctly with diffrent kinds of BPPs

二、CxImage里的SetPixelColor和GetPixelColor

1. CxImage::GetPixelColor,SetPixelColor(y,x,color)
在遍历由CxImage加载的图片像素时,一定要注意GetPixelColor的第二个参数的取值,CxImage跟CBitmap一样,像素数据顺序都是从最后一行到第一行,从左到右,遍历代码如下:

CxImage pngImg("3.bmp",CXIMAGE_FORMAT_BMP);;// 加载后int width = pngImg.GetWidth();int height = pngImg.GetHeight();RGBQUAD color;for (int h = 0; h < height; ++h){for (int w = 0; w < width; ++w){color = pngImg.GetPixelColor(w, height - h - 1, true);BYTE b=color.rgbBlue;BYTE g=color.rgbGreen;BYTE r=color.rgbRed;cout<<"color.rgbBlue: "<<(int)b<<endl;cout<<"color.rgbGreen: "<<(int)g<<endl;cout<<"color.rgbRed: "<<(int)r<<endl;pngImg.SetPixelColor(w, height - h - 1,color);}}

注意:GetPixelColor(),SetPixelColor()   ,第一个参数为宽度变量,第二个参数为高度变量。

2. CxImage::LoadResource加载资源时,一定要注意LoadResource中第三个参数,默认是NULL;当从某个dll中加载需要的资源时,这个参数不能填NULL,而且必须和FindResource的第一个参数一致

http://hi.baidu.com/scnu_xiaokun/blog/item/8a09313332fd6afa1b4cff42.html



0 0
原创粉丝点击