Главная страница
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.01 c
15-1230290011
GEN++
2008-12-26 14:13
2009.02.22
Есть вакансия программиста С для микроконтроллеров ATMEL


2-1231535405
Pavelkq
2009-01-10 00:10
2009.02.22
Непонятки с базой данных


15-1230264209
Slider007
2008-12-26 07:03
2009.02.22
С днем рождения ! 26 декабря 2008 пятница


2-1231757559
Программер
2009-01-12 13:52
2009.02.22
Как выделить item в listbox?


15-1230115350
desc
2008-12-24 13:42
2009.02.22
Динамический триггер в MS SQL Server 2005