// This function stretches a bitmap with specified number of pixels // in horizontal, vertical dimension // Example Call : ResizeBmp(Image1.Picture.Bitmap , 200 , 200); // Diese Funktion zerrt eine Bitmap in die anzugebenden Pixel // Beispielaufruf : ResizeBmp(Image1.Picture.Bitmap , 200 , 200); function TForm1.ResizeBmp(bitmp: TBitmap; wid, hei: Integer): Boolean;
var
TmpBmp: TBitmap;
ARect: TRect;
begin
Result := False;
try
TmpBmp := TBitmap.Create;
try
TmpBmp.Width := wid;
TmpBmp.Height := hei;
ARect := Rect(0,0, wid, hei);
TmpBmp.Canvas.StretchDraw(ARect, Bitmp);
bitmp.Assign(TmpBmp);
finally
TmpBmp.Free;
end;
Result := True;
except
Result := False;
end;
end;
Перевод контента на русский язык:
Функция Delphi, именуемая ResizeBmp, растягивает битмап-изображение до указанного ширины и высоты, сохраняя при этом его соотношение сторон. Функция принимает три параметра: bitmp, который является оригинальным битмапом, wid, который является желаемой шириной resized битмапа, и hei, которая является желаемой высотой.
В функции происходит следующее:
Создается временный битмап TmpBmp с помощью метода TBitmap.Create.
Свойства Width и Height временного битмапа устанавливаются в указанные wid и hei, соответственно.
Определяется прямоугольник ARect с темиже размерами, что resized битмап.
Метод StretchDraw канваса временного битмапа вызывается, передавая в него ARect и оригинальный битмап bitmp. Это растягивает оригинальное изображение до соответствующего прямоугольника, сохраняя при этом его соотношение сторон.
Если возникнут ошибки во время выполнения функции, она возвращает False.
Вот некоторые предложения по улучшению кода:
Рассмотрите возможность добавления параметра для указания, следует ли растягивать или уменьшать изображение. Это можно достичь установкой свойства Mode метода StretchDraw.
Функция сейчас предполагает, что оригинальный битмап имеет альфа-канал (то есть, это не градационное изображение). Если это не так, рассмотрите возможность добавления проверки для этого перед попыткой растянуть изображение.
Вам может потребоваться добавить обработку ошибок для случаев, когда resized битмап не может быть создан успешно.
Вот обновленная версия кода с этими предложениями:
Функция ResizeBmp для растягивания растровых рисунков, которая принимает в себя битмап и размеры в пикселях, после чего StretchDraw рисунок на новый битмап и присваивает результат исходному битмапу.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.