Imageのサイズ変更について


Taku  2002-12-10 22:50:19  No: 2294

いつもお世話になります
Imageを使って白地の作図領域を作ろうとしています(Delphi6  Win2000です)
with  Image1 do
begin
     Width:=Width*2;
     Height:=height*2;
     Canvas.Brush.Style:=bsSolid;
     Canvas.Brush.Color:=clWhite;
     Canvas.FillRect(rect(0,0,Width,Height));
 end;
のようにサイズを変更したいのですが、一定の大きさ以上に表示されません。
何が原因なのでしょうか?

ちなみに
FormのAutoScrollをTrueにするとスクロールバーが現れるのでサイズ自体は大きくなっているようです
デザイン時(起動時)の大きさによって表示限界は比例しています。
StretchをTrueにすれば大きく表示しますが、座標値が変化するので有効に出来ません


にしの  2002-12-11 01:10:23  No: 2295

一定とはいくつでしょうか。
4Mpixelであれば、
http://www.users.gr.jp/ml/archive/delphi/39134.asp
と同じ原因ですね。
TBitmapだけであれば、
http://www.asahi-net.or.jp/~HA3T-NKMR/DGS/
のコンポーネントを使って回避できると思います。
TImageの代替コンポーネントはなさそうです。


Taku  2002-12-11 08:57:28  No: 2296

にしのさま  いつも有難うございます
問題点を上手く表現できなかったので、書きなおします
例えば、起動直後に
Image1.Width:=50;
Image1.Height:=50;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
と実行して  次に
Image1.Width:=100;
Image1.Height:=100;
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
としても
最初に実行した50x50以上に表示出来ません。
image1.Picture.LoadFromFile()を実行すればそのサイズで表示できるのですが
単純に白地Canvasを作りたいだけなのです。


あきお  2002-12-11 12:47:38  No: 2297

多分こうしたいのではないですか?

procedure TForm1.Button1Click(Sender: TObject);
var  Image_A  : TBitMap  ;
begin
  Image_A        := TBitMap.Create ;
  Image_A.Height := Image1.Height  ;
  Image_A.Width  := Image1.Width   ;

  Image_A.Canvas.Brush.Color:=clWhite;
  Image_A.Canvas.FillRect(Rect(0,0,Image_A.Width,Image_A.Height));

  Image1.Picture.BitMap := Image_A;

  Image1.Width:= Image1.Width*2;
  Image1.Height:= Image1.height*2;

  Image_A.Free;

end;

これで、縦横二倍ずつ大きくなる白地を作れました


メモリ煎餅  2002-12-11 14:41:50  No: 2298

>最初に実行した50x50以上に表示出来ません。

フッフッフッ(‾〜-‾)、それは TImage のタタリじゃな。
TImageは暗黙にTBitmapを背後霊として抱えておるのじゃ。
TImageの大きさを変えたければ、その背後霊にお供物を供えて
お願いせねばならぬ。
お供物としては、メモリ煎餅などが良かろう。

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Width := 50;
  Image1.Height := 50;
  Image1.Canvas.Rectangle(0, 0, Image1.Width, Image1.Height);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Image1 do begin
    Picture.Bitmap.Width := Width * 2;
    Picture.Bitmap.Height := Height * 2;    
    Width := Picture.Bitmap.Width;
    Height := Picture.Bitmap.Height;
    Canvas.Brush.Style := bsSolid;
    Canvas.Brush.Color := clWhite;
    Canvas.FillRect(rect(0, 0, Width, Height));
    Canvas.Brush.Color := clRed;
    Canvas.Brush.Style := bsDiagCross;
    Canvas.Ellipse(0, 0, Width, Height);
  end;
end;


Taku  2002-12-11 18:10:34  No: 2299

あきおさん、メモリ煎餅さん  有難うございます
とにかく、Pictureの実体を操作しなければいけないのですね

今回の場合は、Imageは見えなくても良いので
Img:=TBitmap.Create;
Img.Width:=xxxx;
Img.Height:=xxxxx;
として操作しています。
そこで新たな質問なのですが、サイズ指定で大きな値を入れるとエラーになるため
TryとRepeatで確保できる最大サイズを検査しています。
同じ環境でも、その時によって一定では無いようです
使用できる最大サイズを事前に知ることは出来ないでしょうか?


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加