C++生成Bmp图片底层代码
2016-10-24 14:30
453 查看
C++生成Bmp图片底层代码
上述代码生成一个320*240像素的图片,背景色为黑色,中间画了一个白色的矩形
更新于2017年7月7日:刚刚有网友说为什么将照片大小设置为500*500或者是更大的尺寸就不可以了,因为随着静态数据的增加所需要的堆栈保留大小就会增加,而VS中默认保留的是1M,所以程序尚未运行就会出现堆栈溢出错误,解决方法参考一下以下的博文:VS2010运行错误:0x010e86c7
处有未经处理的异常: 0xC00000FD: Stack overflow - yangliuqing19的博客 - CSDN博客 http://blog.csdn.net/yangliuqing19/article/details/51568731点击打开链接
#include <pshpack2.h> #include "stdio.h" #include "stdlib.h" #include "string.h" typedef long BOOL; typedef long LONG; typedef unsigned char BYTE; typedef unsigned long DWORD; typedef unsigned short WORD; //位图文件头文件定义 //其中不包括文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确的读取文件信息) typedef struct { WORD bfType;//文件类型,必须是0x424D,即字符“BM” DWORD bfSize;//文件大小 WORD bfReserved1;//保留字 WORD bfReserved2;//保留字 DWORD bfOffBits;//从文件头到实际位图数据的偏移字节数 } BMPFILEHEADER_T; struct BMPFILEHEADER_S{ WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; }; typedef struct{ DWORD biSize;//信息头大小 LONG biWidth;//图像宽度 LONG biHeight;//图像高度 WORD biPlanes;//位平面数,必须为1 WORD biBitCount;//每像素位数 DWORD biCompression;//压缩类型 DWORD biSizeImage;//压缩图像大小字节数 LONG biXPelsPerMeter;//水平分辨率 LONG biYPelsPerMeter;//垂直分辨率 DWORD biClrUsed;//位图实际用到的色彩数 DWORD biClrImportant;//本位图中重要的色彩数 } BMPINFOHEADER_T;//位图信息头定义 void generateBmp( BYTE * pData, int width, int height, char * filename )//生成Bmp图片,传递RGB值,传递图片像素大小,传递图片存储路径 { int size = width*height*3; // 每个像素点3个字节 // 位图第一部分,文件信息 BMPFILEHEADER_T bfh; bfh.bfType = 0X4d42; //bm bfh.bfSize = size // data size + sizeof( BMPFILEHEADER_T ) // first section size + sizeof( BMPINFOHEADER_T ) // second section size ; bfh.bfReserved1 = 0; // reserved bfh.bfReserved2 = 0; // reserved bfh.bfOffBits = bfh.bfSize - size; // 位图第二部分,数据信息 BMPINFOHEADER_T bih; bih.biSize = sizeof(BMPINFOHEADER_T); bih.biWidth = width; bih.biHeight = height; bih.biPlanes = 1; bih.biBitCount = 24; bih.biCompression = 0; bih.biSizeImage = size; bih.biXPelsPerMeter = 0; bih.biYPelsPerMeter = 0; bih.biClrUsed = 0; bih.biClrImportant = 0; FILE * fp = fopen( filename,"wb" ); if( !fp ) return; fwrite( &bfh, 1, sizeof(BMPFILEHEADER_T), fp ); fwrite( &bih, 1, sizeof(BMPINFOHEADER_T), fp ); fwrite( pData, 1, size, fp ); fclose( fp ); } void main() { int i=0, j=0; struct { BYTE b; BYTE g; BYTE r; } pRGB[240][320]; // 定义位图数据 memset( pRGB, 0, sizeof(pRGB) ); // 设置背景为黑色 // 在中间画一个100*100的矩形 for( i=70;i<170;i++ ){ for( j=110;j<210;j++ ){ // pRGB[i][j].r = 0xff; pRGB[i][j].r=0xff; pRGB[i][j].g=0xff; pRGB[i][j].b=0xff; } } // 生成BMP图片 generateBmp( ( BYTE*)pRGB, 320, 240, "E:\\rgb.bmp" ); }
上述代码生成一个320*240像素的图片,背景色为黑色,中间画了一个白色的矩形
更新于2017年7月7日:刚刚有网友说为什么将照片大小设置为500*500或者是更大的尺寸就不可以了,因为随着静态数据的增加所需要的堆栈保留大小就会增加,而VS中默认保留的是1M,所以程序尚未运行就会出现堆栈溢出错误,解决方法参考一下以下的博文:VS2010运行错误:0x010e86c7
处有未经处理的异常: 0xC00000FD: Stack overflow - yangliuqing19的博客 - CSDN博客 http://blog.csdn.net/yangliuqing19/article/details/51568731点击打开链接
相关文章推荐
- [C++] 几行代码生成漂亮图片,数学家就是牛!
- bmp图片格式学习(c++代码)
- 一段将多张图片生成AVI视频的C++代码
- 纯C++代码实现将像素矩阵保存为bmp图片
- ASP.NET中常用功能代码总结(生成验证图片)
- GUID及其简易生成代码(c++)
- 使用ASP生成任意长度彩色BMP验证码图片
- 使用ASP生成任意长度彩色BMP验证码图片
- 在ASP.NET中上传图片并生成缩略图的C#代码
- C++的GUID的生成代码
- C#的图片处理类,生成高质量缩略图,代码已测试过,效果很好
- 生成图片代码
- asp.net(c#)上传图片并生成缩略图的代码
- ASP生成验证码-BMP图片原理,GIF格式,无组件生成验证码
- vb.net2005 PictureBox生成bmp彩色图片
- 上传图片并生成缩略图的ASP.NET2.0代码!
- 生成随机验证图片--ASP.NET中常用代码之二
- BREW中使用经GZIP压缩的BMP图片,付真机测试过的代码
- 让C++代码与C#代码一起生成一个单一的Assembly