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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.03.2011, 10:02
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию Картинка теряет в качестве при уменьшении

Использую Dephi2007. Изображения в отличном качестве, но когда загружаю их в Timage, используя Propirtianal:=true; что бы маштабировать в уменьшеном размере, они как то преобразуються странно и выглядят совсем не очень,причем некоторые отображаються без потери качества, другие же пикселяться что-ли. Перепробывал все параметры которые только нашёл, но разобраться не получаеться. Может, кто знает как уменьшать картинки на форме не теряя качества.

Ответить с цитированием
  #2  
Старый 07.03.2011, 12:34
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Используй GDI функции StretchBlt и SetStretchBltMode для качественного ресайза либо библиотеки GDI+, FastDIB, GraphicEx, Graphics32.
Ответить с цитированием
  #3  
Старый 07.03.2011, 14:41
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от x128
Используй GDI функции StretchBlt и SetStretchBltMode для качественного ресайза либо библиотеки GDI+, FastDIB, GraphicEx, Graphics32.

Тут оказываеться целая наука!
Ответить с цитированием
  #4  
Старый 09.03.2011, 13:37
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Ребята, я непробиваемый, посмотрел эти функции но никак не могу связать. Там одна для библиотека для больших картинок от 300 на 300 пикс GDI+ называеться, а у меня меньше изображениянемного. StretchBlt и SetStretchBltMode я так понял для canvas,а у меня TImage. Вот как применить StretchBlt TImage никак не получаеться найти.
Ответить с цитированием
  #5  
Старый 09.03.2011, 14:44
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код:
TImage.Canvas
__________________
Помогаю за Спасибо
Ответить с цитированием
  #6  
Старый 10.03.2011, 10:04
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

пример:
Код:
procedure resize_img(img: TImage; nx, ny: integer);
var
  t: TBitmap;
  h: THandle;
  scale: double;
begin
  if img.Proportional then begin
    scale:=max(img.Height/ny, img.Width/nx);
    if scale<1 then scale:=1;
    nx:=trunc(img.Width/scale);
    ny:=trunc(img.Height/scale);
  end;
  t:=TBitmap.Create;
  t.Assign(img.Picture.Graphic);
  t.PixelFormat:=pf24bit;
  h:=t.Canvas.Handle;
  SetStretchBltMode(h, HALFTONE);
  StretchBlt(h, 0,0,nx,ny, h, 0,0,t.Width,t.Height, SRCCOPY);
  t.Width:=nx;
  t.Height:=ny;
  img.Picture.Assign(t);
  t.Free;
end;
на входе имидж с загруженной картинкой и новые размеры.
Ответить с цитированием
  #7  
Старый 10.03.2011, 17:23
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от x128
пример:

Спасибо!, отличный пример, только я не разобрался, что это за цикл с условием который в начале процедуры идет, делфи мне подчеркивет в слове max, но впринципе и без этого цикла прекрасно работает!

Ответить с цитированием
  #8  
Старый 11.03.2011, 10:32
x128 x128 вне форума
Новичок
 
Регистрация: 03.02.2010
Сообщения: 64
Репутация: 133
По умолчанию

Условие проверяет флаг Proportional у имиджа и подгоняет размеры с учетом пропорций если это требуется, функция max находится в модуле Math.
Ответить с цитированием
  #9  
Старый 11.03.2011, 14:50
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Спасибо!!!
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter