使用TImage改变Width和Height时,报存储不足的错误,如何解决?

czp 2006-11-15 08:55:00
请看下面的测试代码:
var PM : TPenMode;
R: TRect ;
begin
img.Picture.Bitmap.IgnorePalette := false ;
img.Width := 3000; //改变时报错,如果该值较小例如2000则没有问题
img.Height := 2000;//改变时报错,如果该值较小例如1000则没有问题
R.Left := 650 ;
R.Top := 850 ;
R.Right := 700 ;
R.Bottom := 900 ;
// img.Picture.Bitmap.IgnorePalette := true ;
with img.Canvas do
begin
PM := Canvas.Pen.Mode;
Pen.Mode := pmNotXor;
pen.Color := clRed ;
Brush.Color := clRed ;
Ellipse(R);
Pen.Mode := PM;
end;
end;

是下面两行导致,
img.Width := 3000; //改变时报错,如果该值较小例如2000则没有问题
img.Height := 2000;//改变时报错,如果该值较小例如1000则没有问题
原因是3000*2000*3(颜色值) = 18000000字节,报存储空间不足.在这个IMG上,我没有打开图片,只是需要在上面画图形.如何解决这个问题?已经提过该问题,但是没有人回答,如能解决该问题,将另一贴上的分也给出:http://community.csdn.net/Expert/topic/5157/5157013.xml?temp=.4592707.
顶者有分!

...全文
174 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
老冯 2006-11-15
  • 打赏
  • 举报
回复
之后又Load一张巨型PICTURE,再测试,还是没有问题。
老冯 2006-11-15
  • 打赏
  • 举报
回复
原封不动你的代码测试了一下,没有任何问题。Img的区域自动扩大,并出现滚动条。
我用的已经被淘汰的机器(PII300 256MB)
王集鹄 2006-11-15
  • 打赏
  • 举报
回复
//我机器上测试没有你说的问题,但改变Image的大小并不等于改变其中位图的大小
begin
img.Picture.Bitmap.Width := 3000;
img.Picture.Bitmap.Height := 2000;
img.Picture.Bitmap.IgnorePalette := false ;
czp 2006-11-15
  • 打赏
  • 举报
回复
编译参数 $MAXSTACKSIZE 不行.觉得改变颜色的存储方式,因为我在上面画的图形的颜色不多,让其少占用存储,但是不知道如何实现.
天涯倦客 2006-11-15
  • 打赏
  • 举报
回复
编译参数 $MAXSTACKSIZE 改下看看。。
czp 2006-11-15
  • 打赏
  • 举报
回复
楼上的兄弟,单纯改变Width为3000,Height=2000,是没有问题,但是,在这种情况下使用img.Canvas 的时候就有问题了.可能是使用画布的时候,才开始为其分配象素占用的内存吧.
ccrun.com 2006-11-15
  • 打赏
  • 举报
回复
新建一个工程,放一个Image在窗体,改变Image的Width为3000,Height=2000,没有你说的问题。
czp 2006-11-15
  • 打赏
  • 举报
回复
说错了,应该是去掉下面行后就有问题.有下面这一行是没有问题,但是有这一行,就不能在上面画图形了.
img.Picture.Bitmap.IgnorePalette := false ;

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧