H264解码后的RGB565存成BMP的问题
小弟最近试了几天. 还是没成功. 生成的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
能不能提供一个完整的保存文件方法. 我目前对rgb 的数据结构不是很清楚 .
颜色不对, 估计一般是需要交换R和B的位置. 要么转换的参数使用BGR, 要么保存时, 自己交换下...
给你一段代码, 试试?