Часть исходного TBitmap вырезается при помощи отрисовки этой части в другой TBitmap.
Допустим есть такой проект:
Тогда алгоритм по вырезанию будет следующий:
Определяем регион вырезаемой области:
var
BitmapSource: TBitmap;
BitmapDest: TBitmap;
DestWidth: Integer;
DestHeight: Integer;
BitmapSourceRect: TRectF;
BitmapDestRect: TRectF;
begin
BitmapSource := ImageSrc.Bitmap;
BitmapSourceRect := TRectF.Create(TPointF.Create(nbX.Value, nbY.Value), nbWidth.Value, nbHeight.Value);
Создаем TBitmap для вырезанной части:
DestWidth := Max(0, Round(nbWidth.Value));
DestHeight := Max(0, Round(nbHeight.Value));
BitmapDest := TBitmap.Create(DestWidth, DestHeight);
BitmapDestRect := TRectF.Create(0, 0, BitmapDest.Width, BitmapDest.Height);
Выполняем отрисовку области исходного битмапа в конечный:
if BitmapDest.Canvas.BeginScene then
try
BitmapDest.Canvas.DrawBitmap(BitmapSource, BitmapSourceRect, BitmapDestRect, 1);
finally
BitmapDest.Canvas.EndScene;
end;
Выводим полученное изображение на форму:
ImageDest.Bitmap.Assign(BitmapDest);
Результат: