キャンバスの描画メソッドの最大値は?

解決


あん  2001-10-30 15:16:32  No: 255  IP: [192.*.*.*]

ImageにCopyRect.FillRect.StretchDrawなどを使用して描画する際、0〜1472の範囲しか描画してくれません。どうしてでしょうか?これより大きく描画するにはどうすればいいでしょうか?Delphi3.0です。

編集 削除
にしの  2001-10-30 16:16:50  No: 256  IP: [192.*.*.*]

Imageのサイズは大きくしていますか?
コピー元・コピー先の大きさは、1472という数字ではないですか?
Delphi5では、特に問題なく2000x2000でも出来ました。

Delphi3の問題かどうかはわかりません。

編集 削除
あん  2001-10-30 18:05:57  No: 257  IP: [192.*.*.*]

にしのさん回答有難うございます。
ClipRectの問題と判りました。Image.Width、Image.Heightに値を設定した時にClipRectが設定されるのは最初だけなんですね、その後値を変えてもClipRectは最初のまま変わらない事が原因でした。しかし、ClipRectは2300ぐらいの値までしかダメのようです。これ以上は描画できないのでしょうか?

編集 削除
にしの  2001-10-30 18:36:49  No: 258  IP: [192.*.*.*]

なるほど。
確かに、Width,Heightを変更しても、ClipRectは変わりませんでした。
ちなみに、ClipRectの限界は2300ではありません。
たぶん、メモリが許す限りの大きさだと思います。
# うちでは、3000x3000は描画できました。9999x9999は EOutOfResourcesが発生しました。

ClipRectを使用しないとまずいんでしょうか。
Image.ClientRectを使用した場合、Width, Height変更後も反映されています。

編集 削除
あん  2001-10-31 02:57:17  No: 259  IP: [192.*.*.*]

とりあえず解決しました。根本的にImageの使い方が良くなかったようでした。
下記の2つの方法で試しました。ScrollBoxにImageを貼付け、FillRectで描画してみました。上の方法では8192あたりまで描画できました。
ホントはCopyRectを使いたいのでそのうち試してみます。
にしのさん有難うございました。

procedure TForm1.FormCreate(Sender: TObject);
var
   btmp: TBitmap;
const
     VAL = 8192;
begin
///////////////////////////////////////////////この方法だとうまくいった

     btmp:=TBitmap.Create;
     btmp.PixelFormat:=pf24bit;
     btmp.Width:=VAL;
     btmp.Height:=VAL;
     Btmp.Canvas.Brush.Style:=bsDiagCross;
     Btmp.Canvas.Brush.Color:=clOlive;
     Btmp.Canvas.FillRect(btmp.Canvas.ClipRect);
     Image1.Width:=VAL;
     Image1.Height:=VAL;
     Image1.Picture.Bitmap.Assign(btmp);
     btmp.Free;

//////////////////////////////////////////////////////////今までの方法
{
     Image1.Picture.Bitmap:=TBitmap.Create;//←これは要らないかな?
     Image1.Picture.Bitmap.Width:=2360;//←これより大きいとエラー
     Image1.Picture.Bitmap.Height:=2360;//←これより大きいとエラー
     Image1.Canvas.Brush.Style:=bsDiagCross;
     Image1.Canvas.Brush.Color:=clRed;
     Image1.Width:=VAL;
     Image1.Height:=VAL;
     Image1.Canvas.FillRect(Image1.ClientRect);
}
end;

編集 削除