16位的灰度图像的像素矩阵

fyz2841585 2011-02-25 02:37:15
各位大虾,只有像素矩阵,而且还是16位的灰度图像的像素矩阵,有什么办法显示出来啊,失真也没关系。用什么函数可以读取啊,我也试过用Hex Workshop,但只是显示16位的灰度图像的像素矩阵
...全文
424 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingyj 2011-04-01
  • 打赏
  • 举报
回复
CSDN牛人真多
fyz2841585 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xyzhaopeng 的回复:]

引用 3 楼 fyz2841585 的回复:

引用 2 楼 xyzhaopeng 的回复:

16位位图的存储方式有2种,RGB5551和RGB565。
对于RGB5551这种形式,转换为24位RGB各分量的计算公式是:
假设wRGB是你的某一个16位像素。

R =((0x7C00 &amp;amp; wRGB16)>>10) << 3 ;
G = ((0x03E……
[/Quote]
我马上去试一下
cdsnpeter 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fyz2841585 的回复:]

引用 2 楼 xyzhaopeng 的回复:

16位位图的存储方式有2种,RGB5551和RGB565。
对于RGB5551这种形式,转换为24位RGB各分量的计算公式是:
假设wRGB是你的某一个16位像素。

R =((0x7C00 &amp; wRGB16)>>10) << 3 ;
G = ((0x03E0 &amp; wRGB16)>> 5) << 3 ……
[/Quote]
那你就按555和565分别试试看。

显示的话,就建立一个Dlg,然后OnPaint的时候,建立一个位图,因为一般系统都是32位色,或者24位真彩色,所以得先转为24位图,选到DC中。

转图的公式就是上面的。

如果有原图对比下那种失真更小就是那种格式。
fyz2841585 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xyzhaopeng 的回复:]

16位位图的存储方式有2种,RGB5551和RGB565。
对于RGB5551这种形式,转换为24位RGB各分量的计算公式是:
假设wRGB是你的某一个16位像素。

R =((0x7C00 & wRGB16)>>10) << 3 ;
G = ((0x03E0 & wRGB16)>> 5) << 3 ;
B = ((0x001F & w……
[/Quote]
我只有像素文件,没有文件头,也没有位图信息投,而且还是16位的灰度图像的像素矩阵,有什么办法显示出来啊,
cdsnpeter 2011-02-25
  • 打赏
  • 举报
回复
16位位图的存储方式有2种,RGB5551和RGB565。
对于RGB5551这种形式,转换为24位RGB各分量的计算公式是:
假设wRGB是你的某一个16位像素。

R =((0x7C00 & wRGB16)>>10) << 3 ;
G = ((0x03E0 & wRGB16)>> 5) << 3 ;
B = ((0x001F & wRGB16) >> 0) << 3 ;

对于565的话,改为。
R =((0xF800 & wRGB16)>>10) << 3 ;
G = ((0x07E0 & wRGB16)>> 5) << 2;
B = ((0x001F & wRGB16) >> 0) << 3 ;

当Compression=BI_RGB时,16位的是555格式,文件头中没有屏蔽码。具体见MSDN的BITMAPINFOHEADER说明。
fyz2841585 2011-02-25
  • 打赏
  • 举报
回复

int main()
{
FILE* fp;
fp = fopen("dib.bmp", "wb");
BITMAPFILEHEADER fileHeader;
fileHeader.bfType = MAKEWORD('B', 'M'); //定值,表示.bmp文件
fileHeader.bfSize = 6291456; //总的字节数
fileHeader.bfReserved1 = 0; //定值
fileHeader.bfReserved2 = 0; //定值
fileHeader.bfOffBits = 54; //定值
fwrite((LPSTR)&fileHeader, sizeof(BITMAPFILEHEADER), 1, fp);
BITMAPINFOHEADER infoHeader;
infoHeader.biSize = 40; //定值
infoHeader.biWidth = 2048; //宽多少像素,最好是4的倍数
infoHeader.biHeight = 1536; //高多少像素
infoHeader.biPlanes = 1;
infoHeader.biBitCount = 16;
infoHeader.biCompression = 0;
infoHeader.biSizeImage = 0;
//infoHeader.biXPelsPerMeter = 3780; //宽度方向上多少像素/米
// infoHeader.biYPelsPerMeter = 3780; //长度方向上多少像素/米
infoHeader.biClrUsed = 0;
infoHeader.biClrImportant = 0;
fwrite((LPSTR)&infoHeader, sizeof(BITMAPINFOHEADER), 1, fp);
for(int i=0; i<3145728; i++)
{
fputc(22, fp); //RGB一样表示灰度图
fputc(22, fp);
fputc(22, fp);
}
return 0;
}
这个是我自己构造的位图程序, RGB都是22,怎么会出现蓝色的图呢

19,468

社区成员

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

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