Растягивание и отображение изображения
...размер изображения, которое вы назначили свойству 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]