Форум: "Начинающим";
Текущий архив: 2009.02.22;
Скачать: [xml.tar.bz2];
ВнизПропорциональный ресайз картинки под 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.071 c