社区
C语言
帖子详情
高手们,请教位操作?50分送
MarsSoft
2000-08-30 10:28:00
各位高手们,请教小弟一招:我想直接存取DirectDraw页面数据,如何在16位高彩色模式下取得每一个像素的R、G、B值呢?又如何将R、G、B三个值合并生成一个16字节的WORD字呢?如何将24位颜色转换为16位,又16位转换为24,等?
...全文
131
2
打赏
收藏
高手们,请教位操作?50分送
各位高手们,请教小弟一招:我想直接存取DirectDraw页面数据,如何在16位高彩色模式下取得每一个像素的R、G、B值呢?又如何将R、G、B三个值合并生成一个16字节的WORD字呢?如何将24位颜色转换为16位,又16位转换为24,等?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Kevin_qing
2000-08-30
打赏
举报
回复
ddsd.dwSize=sizeof(ddsd);
//LPDDSPrimary是指象主表面的指针
LPDDSPrimary->Lock(NULL,&ddsd,DDLOCK_WAIT,0);
WORD color;
color=*((LPWORD)ddsd.lpSurface);
LPDDSPrimary->Unlock(NULL);
現在color是16位的色彩值了。
在565模式下
R=(color&0xf800)>>11;
G=(color&0xfe0)>>5
B=color&0x1f
在555模式下
R=(color&0x7c00)>>10
G=(color&0x3e0)>>5
B=color&0x1f
将前面的RGB按其位数转换了拼成RGB的byte格式就可以了
如16bits555-> 24
用前面的格式分出R16,G16,B16
R24=R16<<3
G24=G16<<3
B24=B16<<3
24->16bits 555
R16=R24>>3
...
24->16bits 565
R16=R24>>3
G16=G24>>2
B16=B24>>3
hoyle
2000-08-30
打赏
举报
回复
对于directdraw来说,使用lock方法和使用getdc方法所取得位图的调色板未必相同,与显卡有关,所以,在很多情况下(尤其是显存较大的情况下),不能简单的利用上面的方法。
如果要使用的话,就一定要用getdc方法。lock方法虽然快,但是却容易出现上面的问题。
我比较过,出现过这种情况。
使用lock方法时
1M显存的显卡上正常(因为显存不够,所以使用内存)
而同样的程序在4M显存的显卡上色彩就出现了偏差
getdc虽然慢一点,但是它根据显卡的情况对调色板进行了修正,所以不会出问题。
电信设备-码垛托盘
分送
机构.zip
电信设备-码垛托盘
分送
机构.zip
电子功用-太阳能电池片串焊机的焊带
分送
机构
行业资料-电子功用-太阳能电池片串焊机的焊带
分送
机构
单端柔性电力系统的直流多功率
分送
控制研究.pdf
单端柔性电力系统的直流多功率
分送
控制研究.pdf
特殊区监管域信息化管理系统企业培训(非报关业务
分送
.pptx
特殊区监管域信息化管理系统企业培训(非报关业务
分送
.pptx
特殊区监管域信息化管理系统企业培训(非报关业务-
分送
.pptx
特殊区监管域信息化管理系统企业培训(非报关业务-
分送
.pptx
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章