Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Как средствами GDI уменьшить картинку


Автор: artful 7.4.2009, 14:42
Скажите можно ли средствами GDI качественно и причем, что очень важно, быстро уменьшить размер картинки. Или может подскажите другой способ как можно максимальноо быстро и качественно сделать уменьшение размера.

З.Ы. Просьба не посылать в поиск... 2 день уже копаю... и поиском пользоваться умею.. как в GDI уменьшить картинку не нашел... а насчет обычного уменьшения я просто хочу посоветоваться что быстрее будет работать...

Автор: Alexeis 7.4.2009, 14:47
На GDI качественно не выйдет. GDI+ позволяет использовать бикубическую интерполяцию.
См. примеры тут http://www.progdigy.com/files/gdiplus.zip

Автор: artful 7.4.2009, 16:44
извеняюсь... а какой именно пример показывает ее работу? smile 
и еще ... подскажите пожалуйсто где взять заголовозные файлы для CodeGear Rad Studio 2009 Delphi

Автор: AntonN 7.4.2009, 16:59
На GDI качественно выйдет, вот пример с ресайзом с применением филтров Митчела/Белла/бикубический/ланкоза и тп
http://desksoft.ru/index.php?downloads=attachments&id=158

Автор: artful 7.4.2009, 17:10
я так понял что пример это Creating Thumbnail Images ???
я прав?  smile 

Автор: Alexeis 7.4.2009, 22:32
AntonN, так там от GDI наверняка один только вывод в битмап и больше ничего. Все остальное самописные алгоритмы. Это не тоже самое что сделать на GDI.
  Таких самопальных фильтов пол сайта torry.net

Добавлено через 1 минуту и 4 секунды
Цитата(artful @  7.4.2009,  15:44 Найти цитируемый пост)
и еще ... подскажите пожалуйсто где взять заголовозные файлы для CodeGear Rad Studio 2009 Delphi

  Там заголовки универсальные под любую версию. Под конкретную версию там подправить сущие мелочи.

Автор: AntonN 7.4.2009, 22:53
Alexeis, там используется GDI и только, разве не так? smile GDI+ там есть? DX, OGL, Fastlib, Spriteutils? Юзается ли через COM CorelDraw, PS, Wacromedia? smile
Ну и как бы вообще: используется Tbitmap, доступ к пикселям через scanline/canvas.pixels[] - это GDI. Я с ним уже 5 лет smile

ЗЫ ну и если хочется совсем не своими руками, то есть SetStretchBltMode(Canvas.Handle, STRETCH_HALFTONE); для StretchBlt()

Автор: Alexeis 7.4.2009, 23:07
AntonN, с таким успехом можно сказать что и GDI+ и OpenGL это GDI, потому что они используют GDI контекст для отрисовки. А еще можно сказать что OpenGL это DirectDraw.
  GDI не предоставляет функций для сжатия и растяжения картинок кроме метода ближайшего соседа. 

Автор: AntonN 7.4.2009, 23:32
Использование Tbitmap с доступом к пикселям scanline/pixels - это уже GDI. Спорить будем?

Цитата

Та часть Win API, которая служит для работы с графикой, обычно называется GDI (Graphic Device Interface). Ключевым в GDI является понятие контекста устройства (Device Context, DC). В Delphi контекст устройства представлен классом TCanvas, свойство Handle которого содержит дескриптор контекста устройства.
TCanvas имеет несколько полезных функций, которые работают с типом TGraphic. Тип TGraphic является базовым классом для графических объектов в Delphi, таких как: битмапы (TBitmap), иконки (TIcon), метафайлы (TMetafile) и JPEG-и (TJPEGImage). Все они используют одни и те же функции, которые приведены в таблице: 
Все эти функции являются методами TCanvas. 


в общем не вижу смысла больше отнекиваться и изворачиваться, если только побуквоедствовать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)