大家看看,这是不是Delphi的1个BUG! (100分)

  • 主题发起人 主题发起人 kaolaxiong
  • 开始时间 开始时间
K

kaolaxiong

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,我在建立bmp文件时发生错误,当我设置bmp.height过大时,
就告诉我超出资源限制,不知如何解决。
我的代码如下:
var
bmp :Tbitmap;
begin
bmp := Tbitmap.create;
bmp.width = 10000;
//运行到下句时出错:超出存储空间
bmp.height := 10000;
.....
end;
 
写错了,单位是ppi
 
为什么没有人回答,难道没有人会这个问题吗
Jpg图像分辨率有谁会吗
 
是不是bmp的Width和Height在设置时有最大限制呀,不知道是多少

 
10000×10000=100,000,000 = 100MB点
如果1点是24位表示就是3个字节,那么存储控间就是300MB,提示内存不足是有可能的。
 
BMP大小限制和当前物理内存(可用?)大小有关,你这么大的图,就算不会出错,操作起来也很慢,建议你分割成若干个小块的BMP来处理
 
PhotoShop不知道怎么处理的,200K多图片会变为400多兆,虽然很慢,但是可以出来结果,保存时我看到他会生成很大的1个很大的TMP 文件,处理完会删除。

我要完成的功能是:把1个图片放大,并保存起来。图片的width 和height需要由用户输入,BT的用户非要放大到上万个象素,搞的我实在没有办法了,那位老兄有办法帮忙解决这个问题,我还有100分,全部上
下边是我的代码,请看看:
Bmp := TBitmap.Create;
Bmp.Width := 10000;
//到下句时候出错
Bmp.Height := 10000; //我昨天试了1下,6000*6000多也会出问题,估计与机器配置也有关系,大家帮忙试1下,

SetStretchBltMode(Bmp.Canvas.Handle,HalfTone);
stretchblt(bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,
image1.Picture.Bitmap.Canvas.Handle,0,0,image1.Picture.Bitmap.Width,
image1.Picture.Bitmap.Height,srccopy);
Bmp.SaveToFile(fileName);
 
局部放大就可以了,为什么非要创建一个那么大的位图呢?难道用户的显示器有那么大?你有没有玩过游戏?场景是部分加载的,你想看哪一部分就取哪一部分!
 
你只要保存放大后的宽高就可以了,不要告诉用户,显示的时候把小图装载进来,然后允许放缩,并把图片大小设置为你保存后的宽高。
 
那个BT的用户是想让我把图形放大后发送到PhotoShop中去,他要在PhotoShop中看图形的width和height
其实他要在PhotoShop中看我转换后的图,不在我的程序里看图
 
碰到这么BT的用户一个办法是说服他,让他到photoshop里转,另一个是你直接写bmp文件,这个时间与精力的投入你应该可以估计到吧?
 
直接写bmp文件,是说组织1个流,写文件头、BitMap头等,逐字节操作呀!
 
经过测试发现,这个问题应该是与您的硬件有关的,在内存大的机器上可以大些
我想DELPHI建立BMP时要在内存中分配足够的空间(可以设想成是1个2维数租,其实应该更大),如果内存不足,系统就会出现上边的问题。
 
谢谢各位了
 

Similar threads

回复
0
查看
632
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
927
SUNSTONE的Delphi笔记
S
后退
顶部