Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.01.2016, 17:21
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию Качество уменьшенной картинки (Stretch)

Всем привет.
Много всего написано но ничего не понятно...
Есть картинка в файле. Нужно ее вывести на форму в размерах 40х50 без особой потери качества. Именно в сохранении качества собственно и вопрос. Спасибо.

Код:
//*****Загрузить аватар***************
Memo := TMemoryStream.Create;
idHTTP1.Get('http://test.ru/res/img/avatar/'+Form1.ZQuery1.fieldbyname('avatar').AsString+'', memo);
idHTTP1.Disconnect;
Memo.SaveToFile('images\avatars\'+Form1.ZQuery1.fieldbyname('avatar').AsString);
memo.free;
//*************************************
avatar.Picture.LoadFromFile('images\avatars\'+Form1.ZQuery1.fieldbyname('avatar').AsString);
Ответить с цитированием
  #2  
Старый 12.01.2016, 20:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, когда я делал такую штуку, то меня качество StretchDraw устроило. Там только надо аккуратно рассчитать размер новой картинки. Если такое качество не устроит, то где-то видел библиотеку, которая позволяет масштабировать картинку с применением разных фильтров. Правда тут такая штука, что нет фильтра, который тебе гарантирует наилучшее качество результата. В зависимости от самой картинки, лучший результат дают разные фильтры.
Ответить с цитированием
  #3  
Старый 13.01.2016, 00:46
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну, когда я делал такую штуку, то меня качество StretchDraw устроило. Там только надо аккуратно рассчитать размер новой картинки. Если такое качество не устроит, то где-то видел библиотеку, которая позволяет масштабировать картинку с применением разных фильтров. Правда тут такая штука, что нет фильтра, который тебе гарантирует наилучшее качество результата. В зависимости от самой картинки, лучший результат дают разные фильтры.
в смысле пропорции рассчитать? я выставил proportion и та же фигня
Ответить с цитированием
  #4  
Старый 13.01.2016, 02:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Дык ты пользуешься встроенным алгоритмом TImage. Он действительно дает на удивление фиговый результат. Я же говорю про ресайзинг "руками". Т.е. загрузил картинку в память, сразу ее переразмерил и сохранил в файл. Потом грузи из файла и без переразмеривания сразу показывай.
Ответить с цитированием
  #5  
Старый 13.01.2016, 08:08
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

если выставить режим HALFTONE для StretchBlt через SetStretchBltMode, то результат будет заметно лучше.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 13.01.2016, 16:21
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
если выставить режим HALFTONE для StretchBlt через SetStretchBltMode, то результат будет заметно лучше.
Можно подробнее что и как выставлять?
Ответить с цитированием
  #7  
Старый 14.01.2016, 09:20
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Код:
SetStretchBltMode(Image.Canvas.Handle, halftone);
StretchBlt(Image.Canvas.Handle, 0, 0, Image.Width, Image.Height, bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, srcCopy);
Ответить с цитированием
  #8  
Старый 14.01.2016, 12:51
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от x128
Код:
SetStretchBltMode(Image.Canvas.Handle, halftone);
StretchBlt(Image.Canvas.Handle, 0, 0, Image.Width, Image.Height, bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, srcCopy);


что такое bmp?

Последний раз редактировалось chellas88, 14.01.2016 в 13:03.
Ответить с цитированием
  #9  
Старый 14.01.2016, 13:57
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

к примеру объект TBitmap
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 14.01.2016, 14:18
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
к примеру объект TBitmap


тоесть нужно 2 картинки (в оригинальном размере и маленькая)?
Ответить с цитированием
  #11  
Старый 14.01.2016, 15:00
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

нет, достаточно одной оригинальной картинки.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 14.01.2016, 15:02
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
нет, достаточно одной оригинальной картинки.

извиняюсь, но тогда зачем 2 объекта timage (image и bmp)?
например мне нужно сделать маленьким обьект avatar(timage) как мне это написать?
Ответить с цитированием
  #13  
Старый 14.01.2016, 15:24
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

см. описание функции StretchBlt и станет все ясно.
первый параметр на чем рисуется изображение, шестой что рисуется. отсюда и два объекта.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter