求24位bmp转16位(565格式)? 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 取每个像素的颜色值,(WORD)R>>3+(WORD)G>>2<<5+(WORD)B>>3<<11。 ,(WORD)R>>3+(WORD)G>>2 < <5+(WORD)B>>3 < <11我觉得这样还不完善,因为这样会导致整个整个图像颜色偏暗,比如拿红色来说,红色用5位来表示,那么按照上面的计算公式红色的最大值为11111000,即248,所以我认为还要在这个基础上乘以255/248,把整个颜色量化到0-255,(当然中间有的颜色值会没有的)。还有,仅仅考(WORD)R>>3+(WORD)G>>2 < <5+(WORD)B>>3 < <11这样的转换公式还是不够的,这样图像还是24位的我认为正确的24位转换为16位图像的方式应该是:1、读取24位真彩色图像的数据,建立一个对应大小的24位DIBSECITON,将图像数据Bitblt到Dibsection中,当然还有一些DC操作。2、建立一个大小和上述大小相同的16位的DIBSECITON,对每两个字节按照上述公式计算结果值,当然还有一些对齐问题。转换的过程是很快的,并且肉眼上基本是看不出什么区别的。上述操作我是用VB实现的,我想用VC也是同样的道理。 ,(WORD)R>>3+(WORD)G>>2 < <5+(WORD)B>>3 < <11我觉得这样还不完善,因为这样会导致整个整个图像颜色偏暗,比如拿红色来说,红色用5位来表示,那么按照上面的计算公式红色的最大值为11111000,即248,所以我认为还要在这个基础上乘以255/248,把整个颜色量化到0-255,(当然中间有的颜色值会没有的)。还有,仅仅考(WORD)R>>3+(WORD)G>>2 < <5+(WORD)B>>3 < <11这样的转换公式还是不够的,这样图像还是24位的我认为正确的24位转换为16位图像的方式应该是:1、读取24位真彩色图像的数据,建立一个对应大小的24位DIBSECITON,将图像数据Bitblt到Dibsection中,当然还有一些DC操作。2、建立一个大小和上述大小相同的16位的DIBSECITON,对每两个字节按照上述公式计算结果值,当然还有一些对齐问题。转换的过程是很快的,并且肉眼上基本是看不出什么区别的。上述操作我是用VB实现的,我想用VC也是同样的道理。 //24位转16位要进行抖动.不需要抖动,我估计 jennyvenus 理解为24位真彩色图像变为索引色的16色了,那是两个不同的概念 http://www.integon.cn/html/Game-developers/4861.php抖动的原理及代码,可以用256色最大程度的少失真显示真彩色。 最近也在研究这个,window在最后画图时,要么24位真彩,直接24位RGB表示,要么建立调色板,用索引查找,可是是建一个16位调色板最多要6万多种颜色,太大了,如果不是设备颜色深度限制,还不如用24位减色表示16位颜色.常用的文件格式也也没有直接支持16位,只好用24位来存储16位,这样的话好像没什么必要。 水平统计,垂直统计多峰顶求助 Debug心得与大家一起分享 datagrid我为什么始终只获得第一行的值? 如何能遍历指定的文件夹包括子文件夹里所内容? 超奇怪,CRecordset往Access数据库添加数据据时,为什么中文字符的字段总是不能完整被添加? 基础问题 可以在CView里面而不是CMainFrame里面创建CStatusBar吗? 再问关于bmp文件保存的问题 如何关闭指定的程序(如internat.exe)?高分!! 学计算机的有必要读博士吗? 编程序慢怎么办,想的太多了怎么办大家帮帮我 Dll中使用playsound提示undeclared identifier
我认为正确的24位转换为16位图像的方式应该是:
1、读取24位真彩色图像的数据,建立一个对应大小的24位DIBSECITON,将图像数据Bitblt到Dibsection中,当然还有一些DC操作。
2、建立一个大小和上述大小相同的16位的DIBSECITON,对每两个字节按照上述公式计算结果值,当然还有一些对齐问题。转换的过程是很快的,并且肉眼上基本是看不出什么区别的。上述操作我是用VB实现的,我想用VC也是同样的道理。
我认为正确的24位转换为16位图像的方式应该是:
1、读取24位真彩色图像的数据,建立一个对应大小的24位DIBSECITON,将图像数据Bitblt到Dibsection中,当然还有一些DC操作。
2、建立一个大小和上述大小相同的16位的DIBSECITON,对每两个字节按照上述公式计算结果值,当然还有一些对齐问题。转换的过程是很快的,并且肉眼上基本是看不出什么区别的。上述操作我是用VB实现的,我想用VC也是同样的道理。