あなたはこのコードを試してみてくださいBitBlt
機能
を使用することができます。あなたは同じビットマップを使用したい場合は
procedure CropBitmap(InBitmap, OutBitMap : TBitmap; X, Y, W, H :Integer);
begin
OutBitMap.PixelFormat := InBitmap.PixelFormat;
OutBitMap.Width := W;
OutBitMap.Height := H;
BitBlt(OutBitMap.Canvas.Handle, 0, 0, W, H, InBitmap.Canvas.Handle, X, Y, SRCCOPY);
end;
、あなたがこの方法で使用することができますが
Var
Bmp : TBitmap;
begin
Bmp:=TBitmap.Create;
try
CropBitmap(Image1.Picture.Bitmap, Bmp, 10,0, 150, 150);
//do something with the cropped image
//Bmp.SaveToFile('Foo.bmp');
finally
Bmp.Free;
end;
end;
、機能
procedure CropBitmap(InBitmap : TBitmap; X, Y, W, H :Integer);
begin
BitBlt(InBitmap.Canvas.Handle, 0, 0, W, H, InBitmap.Canvas.Handle, X, Y, SRCCOPY);
InBitmap.Width :=W;
InBitmap.Height:=H;
end;
のこのバージョンを試してみて、このような方法で使用
Var
Bmp : TBitmap;
begin
Bmp:=Image1.Picture.Bitmap;
CropBitmap(Bmp, 10,0, 150, 150);
//do somehting with the Bmp
Image1.Picture.Assign(Bmp);
end;
ありがとうございます。 2番目のビットマップを必要とせずにこれを達成する簡単な方法はありますか? Delphiの 'Move'ルーチンと同じように、ソースとデスティネーションが重なって扱われますが、2次元の同等物はありますか? – rossmcm
TBitmapのScanLineプロパティでMoveを使用できますが、BitsPerPixelに応じてピクセルのバイトサイズを計算する必要があります –
これは1つのビットマップのみを使用する2番目のオプションを確認します。 – RRUZ