请看下面的测试代码:
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.
顶者有分!

解决方案 »

  1.   

    新建一个工程,放一个Image在窗体,改变Image的Width为3000,Height=2000,没有你说的问题。
      

  2.   

    楼上的兄弟,单纯改变Width为3000,Height=2000,是没有问题,但是,在这种情况下使用img.Canvas 的时候就有问题了.可能是使用画布的时候,才开始为其分配象素占用的内存吧.
      

  3.   

    编译参数 $MAXSTACKSIZE  改下看看。。
      

  4.   

    编译参数 $MAXSTACKSIZE 不行.觉得改变颜色的存储方式,因为我在上面画的图形的颜色不多,让其少占用存储,但是不知道如何实现.
      

  5.   

    //我机器上测试没有你说的问题,但改变Image的大小并不等于改变其中位图的大小
    begin
      img.Picture.Bitmap.Width := 3000;
      img.Picture.Bitmap.Height := 2000;
      img.Picture.Bitmap.IgnorePalette := false ;
      

  6.   

    原封不动你的代码测试了一下,没有任何问题。Img的区域自动扩大,并出现滚动条。
    我用的已经被淘汰的机器(PII300 256MB)
      

  7.   

    之后又Load一张巨型PICTURE,再测试,还是没有问题。
      

  8.   

    说错了,应该是去掉下面行后就有问题.有下面这一行是没有问题,但是有这一行,就不能在上面画图形了.
    img.Picture.Bitmap.IgnorePalette := false ;