Главная страница
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.012 c
15-1229697349
Добежал
2008-12-19 17:35
2009.02.22
InnoSetup настроить установку по разным путям?


2-1231927823
smartleds
2009-01-14 13:10
2009.02.22
Уважаемый All, есть процедура FormCreate поясните как


2-1231431032
Johnnnn
2009-01-08 19:10
2009.02.22
Как грамотно вынести процедуру в отдельный модуль?


15-1229507025
nnov
2008-12-17 12:43
2009.02.22
iphone и im apollo


2-1231614795
Б
2009-01-10 22:13
2009.02.22
Как убрать зазубринки при поворе растра?