ImageにCopyRect.FillRect.StretchDrawなどを使用して描画する際、0〜1472の範囲しか描画してくれません。どうしてでしょうか?これより大きく描画するにはどうすればいいでしょうか?Delphi3.0です。
Imageのサイズは大きくしていますか?
コピー元・コピー先の大きさは、1472という数字ではないですか?
Delphi5では、特に問題なく2000x2000でも出来ました。
Delphi3の問題かどうかはわかりません。
にしのさん回答有難うございます。
ClipRectの問題と判りました。Image.Width、Image.Heightに値を設定した時にClipRectが設定されるのは最初だけなんですね、その後値を変えてもClipRectは最初のまま変わらない事が原因でした。しかし、ClipRectは2300ぐらいの値までしかダメのようです。これ以上は描画できないのでしょうか?
なるほど。
確かに、Width,Heightを変更しても、ClipRectは変わりませんでした。
ちなみに、ClipRectの限界は2300ではありません。
たぶん、メモリが許す限りの大きさだと思います。
# うちでは、3000x3000は描画できました。9999x9999は EOutOfResourcesが発生しました。
ClipRectを使用しないとまずいんでしょうか。
Image.ClientRectを使用した場合、Width, Height変更後も反映されています。
とりあえず解決しました。根本的に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;
ツイート | ![]() |