游戏开发论坛

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

请问高手们,DX用16位位图难道只能用24位位图转换吗?

[复制链接]

14

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2006-10-11 21:58:00 | 显示全部楼层 |阅读模式
请问高手们,DX用16位位图难道只能用24位位图转换吗?,为什么我倒入16位位图显示时候总是不正常,还有倒入16位位图时如何写到离屏表面?

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-10-12 11:21:00 | 显示全部楼层

Re:请问高手们,DX用16位位图难道只能用24位位图转换吗?

大概是你格式设置不正确吧…

14

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-10-12 20:53:00 | 显示全部楼层

Re: 请问高手们,DX用16位位图难道只能用24位位图转换吗?

位图的导入函数是字节的,24位是3字节的那么容易提取rgb3个分量,可是现在倒入的位图是16位的,那么,如何在两个字节中提取三个分量?倒入图像函数是字节的,并不是16位的

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-10-13 06:54:00 | 显示全部楼层

Re:请问高手们,DX用16位位图难道只能用24位位图转换吗?

565的还是555的?用画图能打开不?

14

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-10-13 19:46:00 | 显示全部楼层

Re:请问高手们,DX用16位位图难道只能用24位位图转换吗?

当然能

30

主题

227

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
发表于 2006-10-13 23:41:00 | 显示全部楼层

Re:请问高手们,DX用16位位图难道只能用24位位图转换吗?

我还在搞调色板捏。16位以上的图片用的不多,以下仅供楼主参考,说错了不管^_^,我是菜鸟。

24位的位图硬转成16位,肯定会丢失信息,如果此时导入16位的图是会显示不正常。
如果屏幕每个象素是占16位(2字节)的,24位的是可以直接读取的吧。
这是Windows游戏编程大师中读取16位位图的函数,读24位的位图照样正常。
int Load_Image_Bitmap16(BITMAP_IMAGE_PTR image,  // bitmap image to load with data
                        BITMAP_FILE_PTR bitmap,  // bitmap to scan image data from
                        int cx,int cy,   // cell or absolute pos. to scan image from
                        int mode)        // if 0 then cx,cy is cell position, else
                                       // cx,cy are absolute coords
{
// this function extracts a 16-bit bitmap out of a 16-bit bitmap file

// is this a valid bitmap
if (!image)
   return(0);

// must be a 16bit bitmap
USHORT *source_ptr,   // working pointers
       *dest_ptr;

// test the mode of extraction, cell based or absolute
if (mode==BITMAP_EXTRACT_MODE_CELL)
   {
   // re-compute x,y
   cx = cx*(image->width+1) + 1;
   cy = cy*(image->height+1) + 1;
   } // end if

// extract bitmap data
source_ptr = (USHORT *)bitmap->buffer +
             cy*bitmap->bitmapinfoheader.biWidth+cx;

// assign a pointer to the bimap image
dest_ptr = (USHORT *)image->buffer;

int bytes_per_line = image->width*2;

// iterate thru each scanline and copy bitmap
for (int index_y=0; index_y < image->height; index_y++)
    {
    // copy next line of data to destination
    memcpy(dest_ptr, source_ptr,bytes_per_line);

    // advance pointers
    dest_ptr   += image->width;
    source_ptr += bitmap->bitmapinfoheader.biWidth;
    } // end for index_y

// set state to loaded
image->attr |= BITMAP_ATTR_LOADED;

// return success
return(1);

} // end Load_Image_Bitmap16

14

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2006-10-14 08:29:00 | 显示全部楼层

Re:请问高手们,DX用16位位图难道只能用24位位图转换吗?

谢谢 这位高手
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 15:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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