Bitmapから円形に切り取り、別のBitmapに描画するには、TBitmap.CreateFromBitmapAndMaskを使用します。
constructor CreateFromBitmapAndMask(const Bitmap, Mask: TBitmap);
CreateFromBitmapAndMask関数は引数に画像とマスクをとります。
サンプルプログラム1
フォームにTImageを3つと、TButtonを配置します。
ImageSourceには元の画像、ImageMaskには切り取る範囲を示す画像を設定します。
ImageSourceとImageMaskの画像は同じサイズにします。
ボタンを押すと、ImageTargetに切り取った画像を表示します。
procedure TForm1.Button1Click(Sender: TObject);
begin
ImageTarget.Bitmap := TBitmap.CreateFromBitmapAndMask(
ImageSource.Bitmap,
ImageMask.Bitmap);
end;
サンプルプログラム2
実行時に切り取る範囲を指定するサンプルです。
フォームにTImageを2つと、TButtonを配置します。
ImageSourceには元の画像を設定します。
マスク画像を作成します。
元の画像と同じサイズでなければなりません。
Mask := TBitmap.Create(ImageSource.Bitmap.Width, ImageSource.Bitmap.Height);
TBitmapを編集するときは、CanvasプロパティのBeginSceneメソッドを呼びます。
編集が終わったら、CanvasプロパティのEndSceneメソッドを呼びます。
Mask.Canvas.BeginScene;
…
Mask.Canvas.EndScene;
背景を黒で塗りつぶします。
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);
切り取った画像を作成します。
NewBitmap := TBitmap.CreateFromBitmapAndMask(ImageSource.Bitmap, Mask);
ボタンを押すと元の画像を円形に切り取り、ImageTargetに表示します。
procedure TForm1.Button1Click(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);
ImageTarget.Bitmap := NewBitmap;
NewBitmap.Free;
Mask.Free;
end;
山本様
切り抜き結果が描画されたbitmapをSaveToFileすると
切り抜き領域外も黒色で表示された四角形の画像になるのですが、
フォーム上に表示された形のまま保存は出来るのでしょうか?
又は
領域外の背景色を白にすることは可能でしょうか?