Как использовать метод CopyRect в Delphi
я загружаю изображение с диска и хочу скопировать (часть) его во второй TImage:
Image1.Picture.LoadFromFile(S);
with Image1.Picture.Bitmap do
Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);
Image2 просто показывает белый прямоугольник, а Image1 не показывает файл с диска. Если я удалю второй оператор, Image1 покажет изображение. (Самое странное: если я только комментирую оператор CopyRect и оставляю строку "with" (пустой оператор), Image1 тоже не отображается!)
Как использовать CopyRect для копирования части изображение?
редактировать
Когда я разделяю два оператора на два отдельных действия (кнопки), происходит следующее:
- изображение загружается и отображается в Image1
- Image1 исчезает(!), и Image2 показывает белый прямоугольник.
кстати, я использую Delphi 2009.
1 ответов
TCanvas.CopyRect
копирует прямоугольник с помощью StretchBlt
. StretchBlt требует растрового изображения. Если вы загружаете любой другой графический тип на свое изображение, то его Picture.Bitmap
- это пустое. На самом деле растровое изображение создается только тогда, когда вы ссылаетесь на него: with Image1.Picture.Bitmap do
.
вы можете использовать временное растровое изображение для причины:
var
Bmp: TBitmap;
begin
Image1.Picture.LoadFromFile(S);
Bmp := TBitmap.Create;
try
Bmp.Assign(Image1.Picture.Graphic);
with Bmp do
Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, Canvas, Canvas.ClipRect);
finally
Bmp.Free;
..