扫描大图象的显示(100分)

  • 主题发起人 主题发起人 jiangzixu
  • 开始时间 开始时间
J

jiangzixu

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中用Twain扫描图象到Dib后显示时,总是由于存储空间不足而无法显示。扫描分辨率100-300dpi,图象大小>10M。直接扫描的图象也无法用TImage打开,在Gdi32.dll出现地址访问冲突(估计存储空间问题).

1.如何从hbitmap指针取图到Tbitmap?
2.据说可以从文件分块加载大图象,如何做?
(以事例为准!!!--ps:60dpi左右扫描处理没有问题)
 
10M应该没问题呀,你的内存是多少?
 
512M

扫描出来的大概25M吧。。。还有很多比这大。。。。^_^

 
我也想了解所以顶一下!
 
说明一下:
1。这里不单是大图象的问题,实际上就是70M的BMP也能正常显示,只是速度慢。可以用内存映像文件和只刷新显示区域提高效率。
2。应该还有“高分辨率”的问题!
3。分辨率高的图片,在PB下也无法显示,跟Delphi一样。但一般的图象处理工具又是如何处理的??而没有内存不足的错误?!
 
我先回答你的第一个问题
var
Source: THandleStream;
Midbmp: TBitmap;
begin
Try
Source:= THandleStream.Create(hbitmap); //用到了你的hbitmap句柄
MidBmp:= TBitmap.Create; //你自己决定在什么时候Free吧
MidBmp.LoadFromStream(Source);
Finally
Source.Free;
End;
end;

第二个问题:与第一问题类似的
var
Source: TFileStream;
Midbmp: TBitmap;
begin
Try
Source:= TFileStream.Create(YourBmpFile, fmOpenRead);
MidBmp:= TBitmap.Create; //你自己决定在什么时候Free吧
MidBmp.LoadFromStream(Source);
Finally
Source.Free;
End;
end;
请试试吧,这只是我的个人意见,
如果出错请贴出来,
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~
 
NetSoft:
1。第一个问题,是针对扫描图片到Dib的。实际就是指向Bmp数据的指针。用CreateDIBitmap(...)可以搞定。主要是分辨率大时报:资源不足的错。

2。你为什么不直接用Loadfromfile?内部也就是用流实现的。

该更正问题为:扫描高分辨率大图象的显示???!!!
 
我的方法不行的话,
我也无能为力了,
道行就这么高啦,
帮你顶咯~~~~~~~~~~
高手快来呀~~~~~~~~~~~~
 
Thank you, Netsoft!
 
好久没有人关注啦,结束吧,参与者都有分!

谢谢各位。。

 
多人接受答案了。
 

Similar threads

I
回复
0
查看
994
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
636
import
I
后退
顶部