关于GDI+的那些事(2)——创建空白Image
来源:互联网 发布:牡丹江医学院网络答题 编辑:程序博客网 时间:2024/06/05 04:32
Image类应该是GDI+中最核心的一个类了。
但是它只有两种构造方式,FromFile or FromStream,从磁盘文件或流构造。
所以有时候,你想得到一个某尺寸的空白Image对象,都没有直接调用的方法。
这里提供一个在内存中直接创建image对象的方法。思路是先创建一个空白bmp图的Stream(因为所谓的Stream就是一个文件字节流),然后在此基础上产生Image。
注意,因为微软规定BMP格式图片,宽度必须为4的整数倍,所以假如弄出一个宽度非4整数倍的Stream,Image->FromStream是会出错导致无可用image指针的。
所以这个方法预先将宽度调为4的整数倍。
//凭空建立一副给定尺寸的白色image对象void CreateStream(int width, int height, IStream **ppStm){ CreateStreamOnHGlobal(NULL, TRUE, ppStm); BITMAPFILEHEADER fileHeader; BITMAPINFOHEADER bitmapHeader; //Create Bitmap File Header fileHeader.bfType= 0x4D42; fileHeader.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + width*height*3; fileHeader.bfReserved1= 0; fileHeader.bfReserved2= 0; fileHeader.bfOffBits= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //Create Bitmap Info Header bitmapHeader.biSize= sizeof(BITMAPINFOHEADER); bitmapHeader.biWidth= width; bitmapHeader.biHeight= height; bitmapHeader.biPlanes= 1; bitmapHeader.biBitCount= 24; bitmapHeader.biCompression = 0;//BI_RGB bitmapHeader.biSizeImage= width*height*3; //write data, white color BYTE *data = new BYTE[width*height*3](); for(int i=0; i<width*height*3; ++i) data[i] = 255; (*ppStm)->Write(&fileHeader, sizeof(BITMAPFILEHEADER), NULL); (*ppStm)->Write(&bitmapHeader, sizeof(BITMAPINFOHEADER), NULL); (*ppStm)->Write(data, width*height*3, NULL); if(data) { delete data; data = NULL; }}void CreateImage(int width, int height, Image **ppimg){ //宽度不是4的整数倍时,自动调整 width = width/4*4; IStream *pStm = NULL; CreateStream(width, height, &pStm); (*ppimg) =(*ppimg)->FromStream(pStm,0); if(pStm) pStm->Release();}
0 0
- 关于GDI+的那些事(2)——创建空白Image
- 关于GDI+的那些事(1)——效率、双缓冲
- 关于GDI+的那些事(3)——在内存中将bmp数据压缩为jpeg
- 关于Fragment切换界面空白那些事
- 关于创建自定义控件的那些事(笔记)
- 关于GDI 对象的创建和释放
- 关于窗口创建的那些事 之 内核剖析 读笔
- 关于Executors创建和管理线程的那些事
- CBitmap转换成GDI+的Bitmap (Image)
- CBitmap转换成GDI+的Bitmap (Image)
- fork创建子进时关于文件操作(fwrite、fread)的那些事
- 【转】VB6 GDI+ 入门教程(2)—— GDI+初始化
- 关于《那些年啊,那些事——一个程序员的奋斗史》的更新
- 关于简历的那些事——记微信内推之无知
- 关于OpenCV的那些事——相机标定
- 关于OpenCV的那些事——相机姿态更新
- 关于OpenCV的那些事——相机姿态更新
- C++基本概念——关于头文件的那些事
- 虚拟继承
- Java Web Services面试问题集锦
- 山东种子会 众多专家学者种业界精英齐聚
- 统计学习笔记--感知机模型
- 多台主机共享键鼠
- 关于GDI+的那些事(2)——创建空白Image
- 类属性拷贝
- linux swap空间的swappiness=0
- QuickSort
- 百度三件事儿
- 《老罗Android第二季》Bitmap位图解码
- 检查输入是否为中文
- c技巧
- 什么是内存泄漏