[转]RGB数据保存为BMP图片
2018-06-17 22:29:56来源:未知 阅读 ()
转自:http://blog.csdn.net/yixianfeng41/article/details/52591585
一、BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
1、BMP文件头(14字节)
typedef struct /**** BMP file header structure ****/ { unsigned int bfSize; /* Size of file */ unsigned short bfReserved1; /* Reserved */ unsigned short bfReserved2; /* ... */ unsigned int bfOffBits; /* Offset to bitmap data */ } MyBITMAPFILEHEADER;
2、位图信息头(40字节)
typedef struct /**** BMP file info structure ****/ { unsigned int biSize; /* Size of info header */ int biWidth; /* Width of image */ int biHeight; /* Height of image */ unsigned short biPlanes; /* Number of color planes */ unsigned short biBitCount; /* Number of bits per pixel */ unsigned int biCompression; /* Type of compression to use */ unsigned int biSizeImage; /* Size of image data */ int biXPelsPerMeter; /* X pixels per meter */ int biYPelsPerMeter; /* Y pixels per meter */ unsigned int biClrUsed; /* Number of colors used */ unsigned int biClrImportant; /* Number of important colors */ } MyBITMAPINFOHEADER;
3、颜色表
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:
typedef struct tagRGBQUAD{ BYTE rgbBlue;//蓝色的亮度(值范围为0-255) BYTE rgbGreen;//绿色的亮度(值范围为0-255) BYTE rgbRed;//红色的亮度(值范围为0-255) BYTE rgbReserved;//保留,必须为0 }RGBQUAD;
颜色表中的RGBQUAD结构数据的个数由biBitCount来确定:当biBitCount=1,4,8时,分别为2,16,256个表项;当biBitCount=24时,没有颜色表项。
4、位图数据
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:
当biBitCount=1时,8个像素占1个字节;
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节;
当biBitCount=24时,1个像素占3个字节,按顺序分别为B,G,R;
二、将rgb数据保存为bmp图片的方法
void CDecVideoFilter::MySaveBmp(const char *filename,unsigned char *rgbbuf,int width,int height) { MyBITMAPFILEHEADER bfh; MyBITMAPINFOHEADER bih; /* Magic number for file. It does not fit in the header structure due to alignment requirements, so put it outside */ unsigned short bfType=0x4d42; bfh.bfReserved1 = 0; bfh.bfReserved2 = 0; bfh.bfSize = 2+sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+width*height*3; bfh.bfOffBits = 0x36; bih.biSize = sizeof(BITMAPINFOHEADER); bih.biWidth = width; bih.biHeight = height; bih.biPlanes = 1; bih.biBitCount = 24; bih.biCompression = 0; bih.biSizeImage = 0; bih.biXPelsPerMeter = 5000; bih.biYPelsPerMeter = 5000; bih.biClrUsed = 0; bih.biClrImportant = 0; FILE *file = fopen(filename, "wb"); if (!file) { printf("Could not write file\n"); return; } /*Write headers*/ fwrite(&bfType,sizeof(bfType),1,file); fwrite(&bfh,sizeof(bfh),1, file); fwrite(&bih,sizeof(bih),1, file); fwrite(rgbbuf,width*height*3,1,file); fclose(file); }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:2039. 树的统计
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C++ 共用体 2020-06-05
- 数据结构—链表 2020-05-29
- Qt做Tcp数据传输 2020-05-26
- 图 2020-05-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash