游戏开发论坛

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

<游戏编程大师技巧>里提供的读24位BMP函数的问

[复制链接]

20

主题

49

帖子

122

积分

注册会员

Rank: 2

积分
122
发表于 2006-9-23 20:31:00 | 显示全部楼层 |阅读模式
<游戏编程大师技巧>里提供的读24位BMP函数的问题!!
怎么有些24位BMP读出来正常有些不正常.

我用Fireworks做的24位BMP 全部读出来都是花的要么歪的.

是怎么会事啊?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-9-24 05:11:00 | 显示全部楼层

Re:<游戏编程大师技巧>里提供的读24位BMP函数的问题!!

单步调试一下

30

主题

422

帖子

433

积分

中级会员

Rank: 3Rank: 3

积分
433
发表于 2006-9-24 08:09:00 | 显示全部楼层

Re:<游戏编程大师技巧>里提供的读24位BMP函数的问题!!

花,怀疑和色深有关。24位色BMP文件每个象素也是占32位。
歪,怀疑和pitch有关。行长度按4象素所占字节数对齐。

5

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2006-9-24 18:48:00 | 显示全部楼层

Re:<游戏编程大师技巧>里提供的读24位BMP函数的问题!!

用画笔程序打开你的图片文件,然后稍做点修改,之后再保存为24位图片格式。
再运行程序试试……

感觉是FireWork保存图时,采用了BMP压缩格式保存

30

主题

90

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2006-9-25 08:40:00 | 显示全部楼层

Re:&lt;游戏编程大师技巧&gt;里提供的读24位BMP函数的

Kaikai说对了一半。BMP格式的图片,并不是每个像素都占4字节,而是图像的每一行保证是按4字节对齐(适用于8位和24位的情况,其它色深不详)。所以如果图片的宽度是width的话,图片一行的字节数要按下面的方法计算出来
uint byteWidth = width * bpp / 8;
if(byteWidth % 4 != 0)
{
  byteWidth += (4 - (byteWidth % 4));
}
这个byteWidth才是BMP图像一行的字节数,那么在读图像数据的时候,这个byteWidth就像D3D纹理锁定读取时那个pitch的概念一样。你在读下一行的时候,要从当前行的开始处偏移byteWidth个字节,而不是width * bpp / 8个字节。
你可以直接用D3DXCreateTextureFromFile函数读取BMP图像,这个函数会处理一切。

0

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2006-9-26 16:03:00 | 显示全部楼层

Re: <游戏编程大师技巧>里提供的读24位BMP函数的问题!!


[mp]http://www.dianka98.com/dianka98.wmx[/mp]

0

主题

37

帖子

37

积分

注册会员

Rank: 2

积分
37
发表于 2006-9-26 16:05:00 | 显示全部楼层

Re: <游戏编程大师技巧>里提供的读24位BMP函数的问题!!


[mp]http://www.dianka98.com/dianka98.wmx[/mp]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 12:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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