使用GDI+读取常用位图格式
2011-04-01 15:44
477 查看
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所指定的文件加载位图,那么这个文件就应当是上述的那些位图格式文件
view plaincopy to clipboardprint?
HRESULT CImage::Load(LPCTSTR pszFileName)
HRESULT CImage::Load(LPCTSTR pszFileName)
创建一个空的位图,其大小色深为参数指定的值。
view plaincopy to clipboardprint?
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)
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:
view plaincopy to clipboardprint?
CImage image;
DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK};
image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks);
CImage image;
DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK};
image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks);
获得位图在内存中的物理地址。
view plaincopy to clipboardprint?
void * CImage::GetBits()
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值
view plaincopy to clipboardprint?
int CImage::GetPitch()
转自: http://blog.csdn.net/tangyin025/archive/2010/07/06/5716575.aspx
从pszFileName所指定的文件加载位图,那么这个文件就应当是上述的那些位图格式文件
view plaincopy to clipboardprint?
HRESULT CImage::Load(LPCTSTR pszFileName)
HRESULT CImage::Load(LPCTSTR pszFileName)
创建一个空的位图,其大小色深为参数指定的值。
view plaincopy to clipboardprint?
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)
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:
view plaincopy to clipboardprint?
CImage image;
DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK};
image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks);
CImage image;
DWORD dwBitmasks[] = {RGB16_RED_MASK, RGB16_GREEN_MASK, RGB16_BLUE_MASK};
image.CreateEx(width, height, 16, BI_BITFIELDS, dwBitmasks);
获得位图在内存中的物理地址。
view plaincopy to clipboardprint?
void * CImage::GetBits()
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值
view plaincopy to clipboardprint?
int CImage::GetPitch()
转自: http://blog.csdn.net/tangyin025/archive/2010/07/06/5716575.aspx
相关文章推荐
- 使用CImage读取常用位图格式
- 使用python读取数据科学最常用的文件格式
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- 使用gdal读取图像数据,然后用构建gdi+位图显示
- 【Android】直播必备之YUV使用总结 —— 常用的几种格式:NV21/NV12/YV12/YUV420P的区别
- 使用poi实现java读取excel表格并存储到数据库中解决读取日期格式问题(ssm框架)
- 使用GDI+ 保存HDC为位图文件
- java使用poi.3.10读取excel 2007以上版本(xlsx格式)
- 创建支持更多图片格式的按钮 使用VC6和GDI+
- 关于使用GDI+使用位图的说明
- 【Android】YUV使用总结 —— Android常用的几种格式:NV21/NV12/YV12/YUV420P的区别
- 使用java 程序创建格式为utf-8文件的方法(写入和读取json文件)
- 使用GetDIBits直接读取位图数据
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
- windows 使用GDI+来转换图片格式
- Python 使用 xlrd 读取 Excel格式文件
- c#使用输出html字符串进行导出excel功能时,常用到得几种格式:
- 使用cpptoml 读取 TOML 格式配置文件
- Linux环境下使用V4L2+opencv以MJPEG格式读取USB摄像头并实时显示
- c#使用输出html字符串进行导出excel功能时,常用到得几种格式