linux下用C语言生成一个rgb888的BMP图片,为啥生成了,打开的时候(图片浏览软件)提示头文件有错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下用C语言生成一个rgb888的BMP图片,为啥生成了,打开的时候(图片浏览软件)提示头文件有错相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>

typedef struct tagBITMAPFILEHEADER

unsigned short bfType;
unsigned long bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned long bfOffBits;
BITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER

unsigned long biSize;
unsigned long biWidth;
unsigned long biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned long biCompression;
unsigned long biSizeImage;
unsigned long biXPelsPerMeter;
unsigned long biYPelsPerMeter;
unsigned long biClrUsed;
unsigned long biClrImportant;
BITMAPINFOHEADER;

typedef struct tagRGBQUAD

unsigned char rgbBlue;
unsigned char rgbGreen;
unsigned char rgbRed;
unsigned char rgbReserved;
RGBQUAD;

typedef struct tagBITMAPINFO

BITMAPINFOHEADER bmpIHeader;
RGBQUAD bmiColors[256];
BITMAPINFO;

int main()


int i=0;
int j=0;
//设置BMP像素数据
char myColor[3]=0x99,0xBB,0x22;
FILE *fpR=NULL;
FILE *fpW=NULL;
BITMAPFILEHEADER bmpFHeader;
BITMAPINFO bmpInfo;
fpW=fopen("rgb888test1.bmp","wb");
if(fpW==NULL)

printf("Write the test1.bmp file failed !\n");
exit(1);


//生成一副bmp888图片

//设置文件头信息
bmpFHeader.bfType=0x424D;
bmpFHeader.bfSize=54L+120*120*3;
bmpFHeader.bfReserved1=0;
bmpFHeader.bfReserved2=0;
bmpFHeader.bfOffBits=54L;

//设置BMP信息头信息
bmpInfo.bmpIHeader.biSize=40L;
bmpInfo.bmpIHeader.biWidth=120;
bmpInfo.bmpIHeader.biHeight=120;
bmpInfo.bmpIHeader.biPlanes=1;
bmpInfo.bmpIHeader.biBitCount=24;
bmpInfo.bmpIHeader.biCompression=0;
bmpInfo.bmpIHeader.biSizeImage=120*120*3;
bmpInfo.bmpIHeader.biXPelsPerMeter=0;
bmpInfo.bmpIHeader.biYPelsPerMeter=0;
bmpInfo.bmpIHeader.biClrUsed=256;
bmpInfo.bmpIHeader.biClrImportant=256;

//写入数据于文件
fwrite(&bmpFHeader,sizeof(BITMAPFILEHEADER)-2,1,fpW);
fwrite(&bmpInfo,sizeof(BITMAPINFO),1,fpW);
for(i=0;i<bmpInfo.bmpIHeader.biWidth;i++)

for(j=0;j<bmpInfo.bmpIHeader.biHeight;j++)

fwrite(myColor,sizeof(myColor),1,fpW);


fclose(fpW);

return 0;

参考技术A 第一眼看到Aspire one happy小?就?得?是一台女生?想要?有的??,蛋?,原因?他,桃?????,就是他漂亮的四色外?,??窗,?然?摸之后??得塑?感有?重,嘉?????,不?亮?的外型搭上1.15kg?巧?重,台中?款,10.1?的?幕不??小,台南????,又能放?手提包中方便??,舞蹈服?,其?是取其平衡的做法。

?用Atom Dual-core N550、1G???是小??很一般的?格,??使用Office或是上???影片,玩一些小????是措措有?。?建W7 Starter及android??系?,?是能??使用者快速??和上?。

【硬???介?】

▲前正面。

▲右?面分?有SD卡插槽、耳?孔、USB及?路孔。

▲左?面分???源孔、D-sub及??USB。

完整?容??考 MML行?生活?:Aspire one happy ?系?的粉嫩小??
参考技术B 第一眼看见:bmpFHeader.bfType=0x424D 这句我就笑了,我以前也这么写过 参考技术C 这个我在软件报上看到过,你到它的官网上查一下.地址:编程&&Page=0
下面一段代码是处理图像,可能对你有帮助.特殊矩阵与图像处理的对应方法(上)

16位BMP图的RGB444和RGB565如何区分

这两种图如何分辨出来啊
他们的 信息头.压缩模式 好像都是3
我是在编程里要用,但是我没办法区分RGB444和RGB565

参考技术A 这要说到像素的本质
像素是由红绿蓝三个数值表示的
一般都会用一个字节代表一个值的大小
如 255 255 255 代表白色 0 0 0 代表黑色
但这样的话,每个像素点要一个字节,一共3个字节计24BIT
这就是我们说的24位色
而32位色只是在这个基础上加入的ALPHA值

但是有时会为了节省空间,对像素的数值进行压缩或进行其它处理
如果16位色是把原来8比特每个字节变成 555 或者 565
即原来最大值是255,变成了32,

这时就产生的颜色信息的丢失本回答被提问者采纳

以上是关于linux下用C语言生成一个rgb888的BMP图片,为啥生成了,打开的时候(图片浏览软件)提示头文件有错的主要内容,如果未能解决你的问题,请参考以下文章

bmp文件格式中rgb555与rgb888之间的转换,24位与16位位图的转换

C语言实现BMP格式转RGB格式YUV格式

C语言_数组的查找替换排序拼接

怎么把android framebuffer输出格式改为rgb565

求linux的framebuffer截图,截取生成jpg或者bmp,求程序

linux下用gcc如何生成预处理汇编等文件