如何保存为16位bmp文件

yhwxxx 2007-08-24 11:15:13
原始数据是16位的,想保存为16位的bmp文件
我不知道该怎样写象素数据,参考资料上采用555
或者565编码,不过我有些不是很清楚,谁能给指点一下。
原始数据是raw格式的。
...全文
765 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhwxxx 2007-08-24
  • 打赏
  • 举报
回复
BmpHead bmphead;

bmphead.bfType = 0x4D42;
bmphead.bfSize = vff_rawsize+sizeof(Bmphead);//FileSize
bmphead.bfReserved1 = 0;
bmphead.bfReserved2 = 0;
bmphead.bfOffBits = sizeof(BmpHead);
bmphead.biSize = 0x28;
bmphead.biWidth = vff_pixelsize[0];//width
bmphead.biHeight = vff_pixelsize[1]; //height
bmphead.biPlanes = 1;
bmphead.biBitCount = 16;
bmphead.biCompression = 0;
bmphead.biSizeImage = vff_rawsize;//ImageSize
bmphead.biXPelsPerMeter = 0;
bmphead.biYPelsPerMeter = 0;
bmphead.biClrUsed = 0;
bmphead.biClrImportant = 0;



FILE* fp=fopen("E:\\练习\\sf0100802_RCC_150_ROI.bmp", "wb");

if (fp == NULL)
{
cout<<"Failed to open file for write.";
return 0;

}

fwrite((void*)&bmphead,sizeof(bmphead),1,fp);
fwrite(Image_Data, 2*vff_pixelsize[0]*vff_pixelsize[1], 1, fp);//vff_pixelsize[0]和vff_piexelsize[1]分别为宽和高
fclose(fp);

这样好像不行啊!!
显示没有预览,我是新手,这个我自己弄了两天,没进展。
所以来这里求助。
1982pc 2007-08-24
  • 打赏
  • 举报
回复
先写16位BMP头
BITMAPINFO RGB16BitsBITMAPINFO;
ZeroMemory(&RGB16BitsBITMAPINFO, sizeof(BITMAPINFO));
RGB16BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
RGB16BitsBITMAPINFO.bmiHeader.biWidth = width;
RGB16BitsBITMAPINFO.bmiHeader.biHeight = height;
RGB16BitsBITMAPINFO.bmiHeader.biPlanes = 1;
RGB16BitsBITMAPINFO.bmiHeader.biBitCount = 16;


在填充数据

BITMAPFILEHEADER bmBITMAPFILEHEADER;
ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp
bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*2); ///2=(16 / 8)

//write into file
FILE *mStream = NULL;
if((mStream = fopen(m_sfilename, "wb")))
{
//write bitmap file header
fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
//write bitmap info
fwrite(&(RGB16BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
//write bitmap pixels data
fwrite(lpBitmapBits, 2*width*height, 1, mStream);
//close file
fclose(mStream);
}
yhwxxx 2007-08-24
  • 打赏
  • 举报
回复
这个我看过了,不过我还是不清楚该怎么写16位 的数据信息,
请指教!
我上面的代码应该怎么写呢
aa65433 2007-08-24
  • 打赏
  • 举报
回复
用CXIMAGE类可以直接转换http://www.codeproject.com/bitmap/cximage.asp

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧