游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4430|回复: 10

问一吓``怎样将surface里的数据最快的转成hbitmap?

[复制链接]

20

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2007-5-10 23:24:00 | 显示全部楼层 |阅读模式
我现在的做法是``
surface->Lock(...)
surface->GetDC(&hSurfaceDC);

hMemDC = CreateCompatableDC(...)
hBitmap = CreateCompatableBitmap(...)
SelectObject(hMemDC, hBitmap)

Bitblt(hMemDC,.....hSurfaceDC);

surface->UnLock(...)

但是像上面那样取的话有点慢```我知道Lock之后,可以拿到surface里的数据``但是怎样转为hbitmap呢````好像surface里的数据和普通的bitmap数据不一样``因为有下Pitch这个变量``好像和硬件有关```求教一个比我的方法更快的方法。。。谢谢!

20

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
 楼主| 发表于 2007-5-11 01:13:00 | 显示全部楼层

Re:问一吓``怎样将surface里的数据最快的转成hbitmap?

或者我换个方式问``
surface里的数据是一个什么样的格式?我的目的是要将他转成一个正确的位图数据``这里的正确``是指``只要再加一个bitmapinfo``就可以显示出来的格式``

29

主题

224

帖子

224

积分

中级会员

Rank: 3Rank: 3

积分
224
QQ
发表于 2007-5-11 12:39:00 | 显示全部楼层

Re:问一吓``怎样将surface里的数据最快的转成hbitmap?

或许看看D3D里CreateSurfaceFormFile有帮助,抱歉我也不会。

想起来了,那个方法和楼主的好象类似,看来只有了解bitmap的具体结构才能解决了。Lock后拷贝Surface里的数据应该很简单,以前有很多关于DDraw的特效里都用。

6

主题

99

帖子

99

积分

注册会员

Rank: 2

积分
99
发表于 2007-5-11 18:28:00 | 显示全部楼层

Re:问一吓``怎样将surface里的数据最快的转成hbitmap?

关注,期待达人讲解。

20

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
 楼主| 发表于 2007-5-12 14:48:00 | 显示全部楼层

Re: 问一吓``怎样将surface里的数据最快的转成hbitmap?

那到底surface里的数据格式是怎样的呢。。。郁闷

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-5-12 15:56:00 | 显示全部楼层

Re: 问一吓``怎样将surface里的数据最快的转成hbitmap?

元少: 问一吓``怎样将surface里的数据最快的转成hbitmap?

我现在的做法是``
surface->Lock(...)
surface->GetDC(&hSurfaceDC);

hMemDC = CreateCompa...



如果这样都慢的话,恐怕其它方法也快不了多少了。

Lock后的表面你获得的数据都是图片在内存中的象素值,你可以直接把他们拷贝到hBitmap的图片里,不过我想速度不会快太多。

20

主题

98

帖子

98

积分

注册会员

Rank: 2

积分
98
 楼主| 发表于 2007-5-12 18:08:00 | 显示全部楼层

Re:问一吓``怎样将surface里的数据最快的转成hbitmap?

Lock之后拿到的数据``在加个bitmapinfoheader应该不能显示图片吧```

我是想拿到"正确的"数据,然后memcpy到一个内存去,估计这样会快点的``

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-5-13 23:47:00 | 显示全部楼层

Re:问一吓``怎样将surface里的数据最快的转成hbitmap?

Lock后的数据就是图片的象素值啊,颜色模式和当前你的显示设置有关。

比如32为色深的时候每个象素就是4个字节。

而通过CreateDibSection创建的hBitmap也可以指定为32位色深的与之兼容的格式,然后把整段数据拷贝过去就可以了。

如果要做不兼容格式的拷贝,那还是老老实实用BitBlt算了,自己逐象素进行转换更慢的,除非用指令集进行优化。

11

主题

112

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2007-5-14 12:28:00 | 显示全部楼层

Re:问一吓``怎样将surface里的数据最快的转成hbitmap?

这个要看你如何创建页面的啦,是八位,16位,24位还是32位,注意页面还有个pitch值,而位图的数据区,每一行都可以整除以4的,所以最后可能要加上几位,这个网站上的开发文档里不是有吗

1

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2007-5-14 23:10:00 | 显示全部楼层

Re: 问一吓``怎样将surface里的数据最快的转成hbitmap?

Surface surface;

// get
GraphicsStream gs = SurfaceLoader.Save(ImageFileFormat.Bmp, surface);
Image img = Bitmap.FromStream(gs);

// use
Graphics.DrawImage(img,0,0);
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 09:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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