游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1984|回复: 6

第二次求救:16位模式下如何载入24位位图??

[复制链接]

6

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2005-3-14 20:21:00 | 显示全部楼层 |阅读模式
我的编码方式是:
#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))
24位图已载入到显存bitmap.buffer中
转化并写到主表面的方法是以下代码,但白色全变成了红色,请各位帮忙看一下
USHORT *primary_buffer = (USHORT *)ddsd.lpSurface;      


for (int index_y = 0; index_y < SCREEN_HEIGHT; index_y++)
    {
    for (int index_x = 0; index_x < SCREEN_WIDTH; index_x++)
        {
               UCHAR blue  = (bitmap.buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 0]) >> 3,
              green = (bitmap.buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 1]) >> 3,
              red   = (bitmap.buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 2]) >> 3;

        // this builds a 16 bit color value in 5.6.5 format (green dominant mode)
        USHORT pixel = _RGB16BIT565(red,green,blue);

        
        primary_buffer[index_x + (index_y*ddsd.lPitch >> 1)] = pixel;

        }

    }

8

主题

77

帖子

77

积分

注册会员

Rank: 2

积分
77
发表于 2005-3-14 23:18:00 | 显示全部楼层

Re:第二次求救:16位模式下如何载入24位位图??

楼主应该先判断你的显卡是565还是555,不能盲目的直接认为是565
但愿你的问题是出在这里,因为我不高兴看这么复杂的程序.

20

主题

398

帖子

398

积分

中级会员

Rank: 3Rank: 3

积分
398
发表于 2005-3-14 23:37:00 | 显示全部楼层

Re:第二次求救:16位模式下如何载入24位位图??

bitmap.buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 0])

是不是这个寻址没注意表面跨距的问题?造成数据错位了?

应该是index_y*跨距 + index_x*3 + 0

有些时候跨距并不等于SCREEN_WIDTH*3

6

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2005-3-15 00:12:00 | 显示全部楼层

Re:第二次求救:16位模式下如何载入24位位图??

好象不是数据错位的问题,图形完全正常,就是白色变成红色
DreamSnow你是如何编的码,有空请介绍一下

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2005-3-15 00:24:00 | 显示全部楼层

Re:第二次求救:16位模式下如何载入24位位图??

基本就是先读出来 ,然后再转换 ,你的green那里移位不对,应为

green = (bitmap.buffer[index_y*SCREEN_WIDTH*3 + index_x*3 + 1]) >> 2,

green 为6位

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2005-3-15 00:27:00 | 显示全部楼层

Re:第二次求救:16位模式下如何载入24位位图??

不是跨距的问题,因为已经读到内存了

6

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2005-3-15 00:36:00 | 显示全部楼层

Re:第二次求救:16位模式下如何载入24位位图??

问题已经解决了,果然是green那里移位不正确,谢啦,各位!!!!!!!!!!!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 20:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表