使用CImage读取常用位图格式
2010-07-06 17:17
615 查看
ATL类CImage(在atlimage.h)已经封装了GDI+中队位图的常用操作,通过msdn可以看到这样的描述“CImage provides enhanced bitmap support, including the ability to load and save images in JPEG, GIF, BMP, and Portable Network Graphics (PNG) formats.”这说明,这个类可以支持JPEG、GIF、BMP、PNG等常用图片格式,这样就不再需要第三方库如FreeImage了。
从pszFileName所指定的文件加载位图,那么这个文件就应当是上述的那些位图格式文件
创建一个空的位图,其大小色深为参数指定的值。
这里要注意,如果要创建一个颜色格式为565的16位贴图,必须制定eCompression和pdwBitmasks:
获得位图在内存中的物理地址。
这里要注意两点,1)由于位图是由下往上扫描的,所以其返回的地址实际上是最后一行像素的首地址;2)部分位图在内存中的布局有按2的幂次对齐的特性,所以每一行像素的宽度并非位图的实际宽度,而是比宽度更大的pitch(跨距),如图
pitch的值往往是2的幂次,如256、512、1024等,这样做的好处,当要取得位图中的某个像素时,可以使用位移运算代替乘法运算,从而加快速度,如假定pitch为1024,位图首地址为p(不考虑倒序的情况),若要取得坐标为x、y的像素(x小于等于pitch,且从0开始),则需要 p + y * pitch + x,但这可以优化成 p + y << 10 + x
获得当前位图的pitch值
从pszFileName所指定的文件加载位图,那么这个文件就应当是上述的那些位图格式文件
HRESULT CImage::Load(LPCTSTR pszFileName)
创建一个空的位图,其大小色深为参数指定的值。
BOOL CImage::Create(int nWidth, int nHeight, int nBPP, DWORD dwFlags = 0) BOOL CreateEx(int nWidth, int nHeight, int nBPP, DWORD eCompression, const DWORD* pdwBitmasks = NULL, DWORD dwFlags = 0)
这里要注意,如果要创建一个颜色格式为565的16位贴图,必须制定eCompression和pdwBitmasks:
CImage image; DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK}; image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks);
获得位图在内存中的物理地址。
void * CImage::GetBits()
这里要注意两点,1)由于位图是由下往上扫描的,所以其返回的地址实际上是最后一行像素的首地址;2)部分位图在内存中的布局有按2的幂次对齐的特性,所以每一行像素的宽度并非位图的实际宽度,而是比宽度更大的pitch(跨距),如图
pitch的值往往是2的幂次,如256、512、1024等,这样做的好处,当要取得位图中的某个像素时,可以使用位移运算代替乘法运算,从而加快速度,如假定pitch为1024,位图首地址为p(不考虑倒序的情况),若要取得坐标为x、y的像素(x小于等于pitch,且从0开始),则需要 p + y * pitch + x,但这可以优化成 p + y << 10 + x
获得当前位图的pitch值
int CImage::GetPitch()
相关文章推荐
- 使用GDI+读取常用位图格式
- 使用python读取数据科学最常用的文件格式
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- 使用C语言读取位图
- PAT考试乙级1050(C语言实现) (重点题目)(按格式读取,使用容器vector)
- CImage显示位图与CDC双缓冲冲突,使用路径层解决.
- 毕业设计——使用vb访问BMP位图,如何读取位图分辨率
- 使用Cardme读取安卓IOS导出的vcf格式通讯录
- java使用poi.3.10读取excel 2007以上版本(xlsx格式)
- 【Android】YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别
- c#使用输出html字符串进行导出excel功能时,常用到得几种格式:
- 【Android】直播必备之YUV使用总结 —— 常用的几种格式:NV21/NV12/YV12/YUV420P的区别
- 使用 CFile 来读取特定格式的数据
- JSTL I18N 格式标签库 使用之二_____读取消息资源
- 使用C++读取8位BMP位图
- 使用jsp读取TXT格式文件
- 使用jsp读取HTML格式文件
- 使用POI读取Microsoft Office格式档案
- 数字图像处理 CImage类的使用与封装(jpg png gif tif bmp等格式图像的加载、数据读写、保存等功能)
- YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别