Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.22;
Скачать: CL | DM;

Вниз

Пропорциональный ресайз картинки под Imagelist и DrawGrid   Найти похожие ветки 

 
pavelkq   (2009-01-11 09:48) [0]

На форме имеются 2 компонента Imagelist и DrawGrid. Через диалог выбираю графический файл и масштабирую функцией под размеры ячейки в DrawGrid (создаю миниатюры).
Function ResizeBitmap(bmp: TBitmap; nw, nh: Integer):TBitmap;
begin
 Result:=TBitmap.Create;
 Result.Width:=nw;
 Result.Height:=nh;
 Result.Canvas.StretchDraw(Rect(0,0,nw,nh),bmp);
end;

Размер ячейки 80х60, т.е. пропроция 4х3. Когда картинки с теми же пропорциями, то картинка масштабируется красиво. Но если картинка имеет другие пропорции, то она жутко растягивается. Так же эта картинка (миниатюра) записывается в Imagelist, размеры которого тоже строго определены. Как сделать так, чтобы картинка дополнялась чистыми полями по краям до правильных пропорций?
P.S. Правильно ли я инициализирую результат и где его освободить?


 
KSergey ©   (2009-01-11 10:48) [1]

Можно определить пропорции исходного изображения и рисовать в координатах в соответствии с ними, а не тупо переданный размер.

> P.S. Правильно ли я инициализирую результат и где его освободить?

Правильно, но красиво при таком способе освободить не получится.
Лучше ввести еще один параметр и требовать на входе в функцию заранее созданный TBitmap для результата.
Тогда и освобождение будет логичным: где создали, там и освободили.


 
pavelkq   (2009-01-11 12:13) [2]

Ну, допустим, я понял, что пропорция переданного изображения 3х4, т.е. оно вертикальное. Тогда изменение должно произойти  до (nh*3/4) x 60. При nh=80 получаем размеры 45х60. Но при вставке этого изображения в Imagelist и DrawGrid размером 80х60 вываливается ошибка о несоответствии размеров изображения. Посему, надо как-то дополнить недостающую ширину до 80 пустыми полями или прпросить их не ругаться.



Страницы: 1 вся ветка

Текущий архив: 2009.02.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1230097799
Кое кто
2008-12-24 08:49
2009.02.22
Как играть в малые шахматы(6x6)?


1-1207894891
webpauk
2008-04-11 10:21
2009.02.22
проблема Listview


15-1230157223
istok2
2008-12-25 01:20
2009.02.22
Прикладная учетная система...


15-1230066661
Поросенок Винни-Пух
2008-12-24 00:11
2009.02.22
"расчесать" *.ape + *.cue


15-1229929140
Slider007
2008-12-22 09:59
2009.02.22
С днем рождения ! 22 декабря 2008 понедельник