H264解码后的RGB565存成BMP的问题

发布于 2021-11-11 08:47:24 字数 2259 浏览 967 评论 2

小弟最近试了几天. 还是没成功. 生成的BMP 图片. 色彩不对. 

请大家指教

 
 int  createBmp(const char *filename, uint8_t *pRGBBuffer, int width, int height, int bpp)
 {
   BITMAPFILEHEADER bmpheader;
   BITMAPINFO bmpinfo;

   memset(&bmpheader, 0, sizeof(BITMAPFILEHEADER));
   memset(&bmpinfo, 0, sizeof(BITMAPINFO));
   FILE *fp = NULL;
   fp = fopen(filename,"wr");
   if(fp == NULL )
   {
    return 0;
   }

   bmpheader.bfType = 0x4D42;
   bmpheader.bfReserved1 = 0;
   bmpheader.bfReserved2 = 0;
   bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
   bmpheader.bfSize = bmpheader.bfOffBits + width*height*bpp/8;

   bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
   bmpinfo.bmiHeader.biWidth = width;
   bmpinfo.bmiHeader.biHeight = 0 - height;
   bmpinfo.bmiHeader.biPlanes = 1;
   bmpinfo.bmiHeader.biBitCount = bpp;    //RG565  biBitCount  =  16
   bmpinfo.bmiHeader.biCompression = 0;
   bmpinfo.bmiHeader.biSizeImage = 0;
   bmpinfo.bmiHeader.biXPelsPerMeter = 0;
   bmpinfo.bmiHeader.biYPelsPerMeter = 0;
   bmpinfo.bmiHeader.biClrUsed = 0;
   bmpinfo.bmiHeader.biClrImportant = 0;

   bmpinfo.bmiColors.rgbBlue  = 0x0000f800;
   bmpinfo.bmiColors.rgbGreen = 0x000007e0;
   bmpinfo.bmiColors.rgbRed  = 0x0000001f;
   bmpinfo.bmiColors.rgbReserved  = 0;


   fwrite(&bmpheader,sizeof(BITMAPFILEHEADER),1,fp);
   fwrite(&bmpinfo,sizeof(BITMAPINFO),1,fp);
   fwrite(pRGBBuffer,width*height*bpp/8,1,fp);

   fclose(fp);
   fp = NULL;
   return 1;
 }
int result  =  createBmp(path, (uint8_t *)pixels, 352,288,16);

 LOGI(" createBmp =    %d ",result);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

惜醉颜 2021-11-11 16:41:11

能不能提供一个完整的保存文件方法. 我目前对rgb 的数据结构不是很清楚 .

野心澎湃 2021-11-11 14:29:24

颜色不对, 估计一般是需要交换R和B的位置. 要么转换的参数使用BGR, 要么保存时, 自己交换下...

给你一段代码, 试试?

for (int i = 0; i < height; i ++) {
	for (int j = 0; j < width; j++) {
		p = rgb_buffer + i * width * (bpp / 8) + j * (bpp / 8);
		q = rgb_buffer + i * width * (bpp / 8) + j * (bpp / 8) + 2;
		c = *p;
		*p = *q;
		*q = c;
	}
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文