TBitmapをStretchで描画するには

解決


ねこ  2004-06-04 08:13:55  No: 9310

TBitmapに割り当てた画像をTImageのStretchプロパティがtrueのときのように
サイズ一杯に引き伸ばして描画する方法はないでしょうか?

TBitmapのwidth、heightを実際の画像より大きく指定しても画像は引き伸ばされず
余白が白く塗りつぶされて表示されるようです。

TImageのPicture.Bitmapに画像を割り当てればStretchできますが、今回は
TBitmapのみをインスタンスとして使いたいものでお尋ねしました。


レス  2004-06-04 08:51:15  No: 9311

もう一つ TBitmap のインスタンスをつくって、その Canvas.StretchDraw() 
でコピーします。


jok  2004-06-04 09:58:23  No: 9312

レスさんと同じですが例を示します。

  public
    bmp:TBitmap;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  bmp := TBitmap.Create;
  bmp.LoadFromFile('C:\Test.bmp')
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  bmp.Free;
end;

procedure StretchBMP(bmp:TBitmap;Ratio:Single);
var
  tempBMP:TBitmap;
begin
  tempBMP := TBitmap.Create;
  try
    tempBMP.Assign(bmp);
    bmp.Width := Round(tempBMP.Width*Ratio);
    bmp.Height := Round(tempBMP.Height*Ratio);
    bmp.Canvas.StretchDraw(Rect(0,0,bmp.Width,bmp.Height),tempBMP);
  finally
    tempBMP.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  StretchBMP(bmp,1.5);
  Canvas.Draw(10,10,bmp);
end;


ねこ  2004-06-04 11:06:01  No: 9313

迅速なご回答ありがとうございました。
TBitmapにCanvasがあるのは気づいていましたが、StretchDrawというメソッド
の存在を知らず、また知っていたとしても矩形領域を別のbmpで再描画する
という発想がありませんでした。
どうもありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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