前回の続きです。
マスクが適用されたTBitmapを保存すると、切り取られた部分が透明色になります。
次のコートはTImageの画像を円形で切り取り、ファイルに保存します。
保存されたファイルを確認すると、切り取られた部分が透明になっていることがわかります。
procedure TForm1.ButtonSaveToFileClick(Sender: TObject);
var
Mask, NewBitmap: TBitmap;
begin
Mask := TBitmap.Create(ImageSource.Bitmap.Width, ImageSource.Bitmap.Height);
Mask.Canvas.BeginScene;
// 黒で塗りつぶす
Mask.Canvas.Fill.Color := TAlphaColorRec.Black;
Mask.Canvas.Fill.Kind := TBrushKind.Solid;
Mask.Canvas.FillRect(TRectF.Create(0, 0, Mask.Width, Mask.Height), 0,
0, [], 1.0);
// 白で円を描く
Mask.Canvas.Fill.Color := TAlphaColorRec.White;
Mask.Canvas.Fill.Kind := TBrushKind.Solid;
Mask.Canvas.FillEllipse(TRectF.Create(0, 0, Mask.Width, Mask.Height), 1.0);
Mask.Canvas.EndScene;
// 切り抜いた画像をファイルに保存する
NewBitmap := TBitmap.CreateFromBitmapAndMask(ImageSource.Bitmap, Mask);
NewBitmap.SaveToFile('C:\tmp\test.png');
NewBitmap.Free;
Mask.Free;
end;
画像をCanvas上に描画するには、TCanvasクラスのDrawBitmapメソッドを使用します。
次のコードでは、赤色で塗りつぶしたCanvasの上に先ほど保存した画像を描画します。
procedure TForm1.ButtonDrawBitmapClick(Sender: TObject);
var
NewBitmap: TBitmap;
begin
NewBitmap := TBitmap.CreateFromFile('C:\tmp\test.png');
// 赤で塗りつぶす
ImageTarget.Bitmap.SetSize(NewBitmap.Width, NewBitmap.Height);
ImageTarget.Bitmap.Canvas.BeginScene;
ImageTarget.Bitmap.Canvas.Fill.Color := TAlphaColorRec.Red;
ImageTarget.Bitmap.Canvas.Fill.Kind := TBrushKind.Solid;
ImageTarget.Bitmap.Canvas.FillRect(TRectF.Create(0, 0, NewBitmap.Width,
NewBitmap.Height), 0, 0, [], 1.0);
// Bitmapを描画する
ImageTarget.Bitmap.Canvas.DrawBitmap(NewBitmap,
TRectF.Create(0, 0, NewBitmap.Width, NewBitmap.Height),
TRectF.Create(0, 0, ImageTarget.Bitmap.Width,
ImageTarget.Bitmap.Height), 1.0);
ImageTarget.Bitmap.Canvas.EndScene;
NewBitmap.Free;
end;
背景色はお好きな色をお使いください。
山本様
前回のページに質問させていただいた者です。
こちらの情報を参考にさせていただき、期待する画像ができました。
ありがとうございました。
※質問後も前回のページのみ見ていて、このページの存在に気がつきませんでした。
お礼が遅くなりすみません。