Советы по Delphi

         

Растягивание и отображение изображения


...размер изображения, которое вы назначили свойству picture.graphic, также имеет свойство размера. Если вы зададите элементу управления размер, скажем, 320x200, а хранящемуся в нем растру 160x100, то при сброшенном свойстве stretch вы обнаружите вокруг растра серую полоску.

Вот способ обойти эту проблему.

    procedure TForm.ZoomImage;
var Bitmap: TBitmap;
DstRect: TRect; begin
{ Здесь можно установить новое растровое изображение с нужными для масштабирования пропорциями, таким образом добиваясь заполнения родительсткой области. }
Bitmap := TBitmap.Create; Bitmap.Width := { задайте здесь ширину для измененого масштаба } Bitmap.Height := { задайте здесь высоту для измененого масштаба }


Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect,{здесь включите ваше изображение, которое вы хотите здесь видеть с измененным масштабом});
{ Здесь назначьте (assign) новое изображение свойству graphic компонента ImageBox. ImageBox автоматически избавляется от ресурсов, использованных с предыдущим изображением. }
Image1.Picture.Graphic := Bitmap; Image1.Invalidate; end;

Это должно работать, или по крайней мере дать вам идею отностительно того, как это можно сделать. Если я что-то забыл, пожалуйста, не судите строго, и скажите мне об этом. Имейте в виду, что все, что я описал выше, не нужно делать в обработчике события onPaint. Мне нравится компонент ImageBox, поскольку у него хватает ума освобождаться от старого изображения при назначении нового. Я предполагаю, что если вы используете метод Assign вместо метода назначения bitmap, то вы просто получите его новую копию, поэтому вместо этого просто воспользуйтесь ImageBox... В конце процедуры вы должны все-таки освободить новое изображение.

Решение проблемы кроется в изменении свойств TImage.Picture.Bitmap.Width и TImage.Picture.Bitmap.Height. [001938]



Содержание раздела