获取bmp(位图) 数据区指针的方法?(200分)

  • 主题发起人 主题发起人 未来107
  • 开始时间 开始时间

未来107

Unregistered / Unconfirmed
GUEST, unregistred user!
Tbitmap类的scanline方法可以获取位图文件的数据区首指针!但是[red]频繁调用[/red]这个来获取bmp数据区指针的时候,会使windows画图程序在画图的时候会产生折笔(不流畅),我测试了获取数据区指针scanline[height-1]所花费的时间(gettickcount),结果为0,说明获取的方法并不慢,但是为什么会使画图程序产生折笔,不流畅呢?有没有其他获得bmp数据区指针的方法?

困扰我一星期了!朋友们帮个忙!


 
你获得指针干什么?用filestream不行吗?
 
需要获取指针,进行压缩,本来可以用getbitmapbit将bmp数据复制到数组中,但是这样在频繁操作的时候,速度就慢了
 
在TBitmap中图像的所有信息不是存储在一起的,就算你得到指针也没用。
如果的你图像是24bit的转换速度应该很快,因为scanline是先把图像转成24bit的RGB图再处理的,如果图像操作次数较多,可以考虑先转成24bit图再处理。
如果仅仅为了压缩,可以用TMemoryStream来加载图片内容.
 
用scanline很好用,只是频繁调用导致画图程序出现停滞现象!
Tmemorysteam慢了
 
这个问题不用指针吧!用loadfromstream不就可以了吗?
 
loadfromstream 慢了!
 
你取得他的Scanline的地址后保存这个指针,在图片大小形状补改变的情况下,他的数据区应该不会变,以后使用直接使用这个指针就可以了,不需要每次都调用Scanline的属性。
 
抓取的图片大小并不固定,是随机的!

如果不用scanline,那么用什么方法可以获取ddb图像的数据区指针?

bmp:Tbitmap;
bmp:=Tbitmap.create;
bmp.widht:=800;
bmp.height:=600;
bitblt(....);
得到ddb格式bmp图像,如何直接或取这个图像的数据区指针?

据我测是,无论是scanline还是getdibbits等没有一个例外都似乎抓换成dib格式再取地址

各位程序牛人帮忙啊!
 
对于 TBitmap,可以用以下的方法:

var
bm: Windows.Bitmap;
bmp: TBitmap;
begin
...
GetObject(bmp.Handle, SizeOf(bm), @bm);
bm.bmBits <--- 你要的数据首地址
...
end;
 
cqbaobao
bm.bmBits的地址为空

var
bm: Windows.Bitmap;
bmp: TBitmap;
begin
bmp:=Tbitmap.Create;
bmp.Width:=1024;
bmp.Height:=768;
bitblt(bmp.Canvas.Handle,0,0,1024,768,getdc(0),0,0,srccopy);
GetObject(bmp.Handle, SizeOf(bm), @bm);
到这里bm.bmBits为空,原因是我没有指定bmp.handletype以及PixelFormat,
不过我希望是在不指定bmp.handletype以及PixelFormat的情况下,获取数据区地址?
实际上就是如何获取ddb位图的内存?
 
我想你的问题应该不在于更快地取得这个指针,
同意 TYZhang 的说法,每次处理(压缩?那比取指针费时得多了!)中,
这个指针用不着取多次,并且 24 或 32 位位图处理速度应该很快的。

或者你可以试试 FastBmp 或者 Graphic32,速度或许会提升。
 
如果图像大小不变,那么的确可以只取一次就可以了,问题是这个图像大小是随机的,大小并不确定!
FastBmp 或者 Graphic32实际上都是用dib格式在取数据,相对于ddb格式的位图,在bitblt的时候他们要慢得多的多
 
//但是频繁调用这个来获取bmp数据区指针的时候,会使windows画图程序在画图的时候会产
//生折笔(不流畅),

频繁调用 与 windows画图程序
可见你在scan时更改了数据,而这数据要显示出来. 更改数据所花费的时间造成了显示的滞留现象.
你可以更改完后一次性把图显示出来.

不知道说的对不对.[^][^][^][^]

 
scanline这个方法确实不错,停滞现在好像比较难解决,
数据更新占用时间太大
 
我再将问题说的清楚一点,我阐述问题很差:)
var
bmp:Tbitmap;
begin
bmp:=Tbitmap.create;
bmp.widht:=800;
bmp.height:=600;
bitblt(....);
end;
上面bitblt在抓屏仅需15毫秒左右,原因是未指定bmp的PixelFormat以及handletype,它是
ddb格式的位图,这正好是我需要的,但是我不能取得他的数据区首地址!

现在加上bmp.handletype=bmdib;
bmp.PixelFormat=pf16bit;
那么bitblt的速度会很慢大约90-125毫秒,因为它是dib位图,这时候用scanline速度很快
也不会有卡的现象。而上面的ddb位图用scanline就会变慢,大约100毫秒。

即使用固定bmp,也就是事先确定scanline那么,在bitblt也会很慢,所以最后的问题是

如何获取在不确定位图PixelFormat的情况下用bitblt抓得的图(ddb)的数据内存地址?
因为,如果能够直接取得,那么所需时间仅需15毫秒就足够了。


 
去下载一个FastBmp的控件
 
所有网站 图像 网上论坛 网页目录

高级搜索
使用偏好
搜索所有网站搜索所有中文网页搜索简体中文网页



所有网站 简体中文 和 繁体中文网页中,约有 29 项符合fastbmp的查询结果,以下是第 1 - 8 项。 (搜索用时 0.39 秒)

编程联盟--精品控件--首页--图象控件--FastBmp
... 文件控件. 其它控件. FastBmp. 控件授权:共享软件 注册费用: 适用工具:
控件开发:HomePage. 控件简介:一个强大的图像VCL,可以支持自由缩放图像,
任意旋转图像, 锐化/钝化图像,特殊效果处理,马赛克,加杂音点等。. ...
cnprogram.myrice.com/control/ soft_con_image/fastbmp.html - 10k - 网页快照 - 类似网页

编程联盟--精品控件--首页--图象控件
... 控件名称:FastBmp 控件授权:共享软件适用工具: 控件开发:HomePage
控件简介:一个强大的图像VCL,可以支持自由缩放图像,任意旋转
图像, 锐化/钝化图像,特殊效果处理,马赛克,加杂音点等。. ...
cnprogram.myrice.com/control/ soft_con_image/index1.html - 12k - 网页快照 - 类似网页

CSDN-软件下载页面
... csdn.net, CSDN-软件频道-软件分类: 图形图像类. FastBmp. 作者:G. Alex Cowie 网址:http://www.jps.net/gfody
日期:2000-7-14. (软件大小:111k). ... TMagnify. TPolyLine for Delphi &amp; C++Builder. TCAD for Delphi &amp;
C++Builder. TDICOMCAD for Delphi &amp; C++Builder. FastBmp. TPicShow v2.32. Graphics32. ...
www.csdn.net/cnshare/soft/4/4605.shtm - 12k - 网页快照 - 类似网页

CSDN-软件频道
... (10)TPolyLine for Delp.. 费弘斌, 498k, 2000-12-7. (11)TCAD for Delphi &amp; .. 费弘斌, 396k, 2000-12-7.
(12)TDICOMCAD for Delp.. 费弘斌, 280k, 2000-12-7. (13)FastBmp, G. Alex Cowie, 111k, 2000-7-14.
(14)TPicShow v2.32, Kambiz R. Khojasteh, 184k, 2000-6-25. (15)Graphics32, Alex Denissov, 882k, 2000-5-26. ...
www.csdn.net/cnshare/shtm/88.shtm - 19k - 2004年5月23日 - 网页快照 - 类似网页
[ www.csdn.net站内的其它相关信息 ]

[海阔天空下载站]-->编程开发类-->图象控件-->FastBmp
... 本类每周排行. 输入软件名称或说明关键字搜索:, 图象控件. A, B, C, D, E, F, G,
H, I, J, K, L, M, N. O, P, Q, R, S, T, U, V, W, X, Y, Z, 其他, 国产. FastBmp. 软件名称: FastBmp.
软件授权: 共享软件 注册费用: 使用平台: Win95/98/NT/2000 软件开发: HomePage
联系信箱:. ...
www.hktk.com/soft/soft_con_image/fastbmp.html - 10k - 网页快照 - 类似网页

[海阔天空下载站]-->软件分类-->编程开发类 ...
... 软件名称:FastBmp 软件授权:共享软件使用平台:Win95/98/NT/2000 软件开发:HomePage
软件简介: 一个强大的图像VCL,可以支持自由缩放图像,任意旋转图像,
锐化/钝化图像,特殊效果处理,马赛克,加杂音点等。. ...
www.hktk.com/soft/soft_con_image/index1.html - 20k - 网页快照 - 类似网页

编程网==>> 软件下载=>> FastBmp
... 广告位招租, (所有下载页面显示,100/月). 软件名称:, FastBmp, 软件语言:,
简体中文. 软件类别:, 国产软件/ 程序源码 / VCL控件类. 运行环境:, WinXP,
Win2000, NT, WinME, Win9X. 授权方式:, 共享软件. 软件大小:, 111 KB. 软件等
级:, ...
ywasp.w23.1358.net/SoftView.asp?SoftID=2316 - 24k - 补充材料 - 网页快照 - 类似网页

易捷网--编程控件
... Image/PaintBox/Shape. ● 控件名称:FASTBMP.ZIP. 2002年08月03日. 作者:GordonAlexCowieIII.
TFastBmp是改良版的TBitmap类,提供pixels属性快速配置某点的颜色(1.1版,附
源码). 下载. ● 控件名称:FANCYIMG.ZIP. 2002年08月03日. 作者:PaulBrian. ...
www.neweasier.com/vcl.html?class=21&amp;page=3 - 42k - 补充材料 - 网页快照 - 类似网页

为了提供最相关的结果,我们省略了与已显示的 8 个类似的条目。
根据您的意愿,可将省略的结果纳入搜索范围后再重新搜索。










在此搜索结果内再搜索 | 语言工具 | 搜索建议






--------------------------------------------------------------------------------


&amp;copy;
 
期待解决
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部