Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

Как масштабировать используя GPU?   Найти похожие ветки 

 
wizarden ©   (2005-09-20 08:31) [0]

Хочется масштабировать (уменьшать, увеличивать) изображения из TImage используя аппаратное ускорение графического процессора. Т.е. надо из виндового приложения - не игра - это делать. Как это сделать? Примеры приветствуются.


 
Sapersky   (2005-09-20 11:29) [1]

Ну а как обычно используется GPU? OpenGL или Direct3D и вперёд.
У меня есть пример для D3D7, правда без TImage.

Или, может быть, проще обойтись программным масштабированием, если как следует всё оптимизировать. См., например, модуль FastSize.pas отсюда:

http://prdownloads.sourceforge.net/skinner/FastLib.zip?download

Или подождать очередной Windows, в котором аппаратное ускорение обещают встроить в GDI :)


 
wizarden ©   (2005-09-20 14:50) [2]

Ну вот как то не хочется ждать следующей виндовс. Программа создает миниатюры для сотен файлов, хочется ускорить этот процесс. Вроде можно как то подсунуть графическому процессору битмар заставить его масшатабировать желательно со сглаживаением и забрать обратно. Если у Вас есть пример которые продвинет меня в этом направлении буду рад.


 
WondeRu ©   (2005-09-20 15:46) [3]

wizarden ©   (20.09.05 14:50) [2]
ну не совсем хардварно... но бибилиотека GDI+ умеет это делать замечательно... *.pas файлы на progdigy.com

ну а для хардварного только DirectDraw... блиттинг называется это там...

а в простом API это StretchBlt


 
Sapersky   (2005-09-20 16:09) [4]

Нет, для миниатюр аппаратное ускорение лучше не использовать.
Если исходная картинка большая, время на преобразование её в нужный формат текстуры (или поверхности) наверняка превысит время софтверного уменьшения (т.к. и в том и другом случае требуется обработать каждый пиксель исходного изображения, но при уменьшении размер результирующей картинки меньше -> меньше обращений к памяти). Это при уменьшении без сглаживания - но оно ИМХО и не нужно. Или можно просто слегка размазать миниатюру блюром (быстро, т.к. размер маленький) - вот вам и сглаживание :)

Так что - FastLIB, GDI(StretchBlt), GDI+.
Я тестировал первые два - со сглаживанием быстрее FastLIB, без сглаживания - примерно одинаково. Насчёт GDI+ не знаю.

Ещё, jpeg (большинство картинок ведь jpeg) можно грузить не полностью, а 1/2, 1/4 и т.д. Да и программное уменьшение в "круглое" кол-во раз (если самому написать оптимизированную функцию) должно быть быстрее.


 
wizarden ©   (2005-09-20 16:19) [5]

... а потом миниатюры надо увеличивать до размера экрана. Вообщем задачи как уменьшать так и увеличивать. Странно, что выйгрыша нет, вроде бы такая мощь, а задача типовая для графики. Ладно посмотрю в сторону указанных библиотек и поищу про блиттинг.


 
XProger ©   (2005-09-20 21:58) [6]

http://msdn.microsoft.com/library/en-us/gdi/bitmaps_9cok.asp?frame=true


 
WondeRu ©   (2005-09-21 09:17) [7]

wizarden ©   (20.09.05 16:19) [5]
... а потом миниатюры надо увеличивать до размера экрана. Вообщем задачи как уменьшать так и увеличивать


и еще чтоб картинка полученная из миниатюры была хорошего качества? ;)


 
Sapersky   (2005-09-21 12:09) [8]

Если увеличение/уменьшение (увеличение исходных картинок, я так понимаю, миниатюры без толку увеличивать) - то теоретически из аппаратного ускорения можно извлечь какую-то выгоду... Но это будет ничуть не проще, чем грамотная оптимизация софтверных алгоритмов. Скорее даже сложнее - в аппаратной графике масса нюансов, которые непосвящённый будет постигать долго и мучительно.
Поэтому рекомендую начать с программной обработки - по при этом чётко представлять, что происходит с картинкой, сколько раз и как она обрабатывается. Желательно понимать, что происходит на уровне пикселей - поэтому и рекомендую FastLib (она opensource).
Обратить внимание на оптимизацию загрузки jpg - это место может стать главным тормозом. IJL, которая имеется в комплекте с FastLIB, грузит быстрее стандартного модуля jpеg.pas, может грузить отдельные фрагменты картинки.


 
miek ©   (2005-09-22 08:38) [9]

какая выгода из аппаратного ускорения? сначала придется преобразовать изображение в текстуру, потом перегнать ее в видеопамять, потом все это наоборот. к тому же, масштабирует видюха только с линейной интерполяцией, сравните в фотошопе - что луше, линейная или кубическая.
баловство все это.


 
Sapersky   (2005-09-22 13:33) [10]

Выгода может быть, если требуется множественное масштабирование одной и той же картинки с выводом на экран (т.е. не нужно тащить из видеопамяти в обычную), по причине высокой скорости собственно масштабирования (при относительно большом количестве предварительных операций, да).

Может, конечно, и баловство. Но MS зачем-то влез в это дело... :)


 
Дмитрий Белькевич   (2005-09-25 16:18) [11]

>какая выгода из аппаратного ускорения? сначала придется преобразовать изображение в текстуру, потом перегнать ее в видеопамять, потом все это наоборот. к тому же, масштабирует видюха только с линейной интерполяцией, сравните в фотошопе - что луше, линейная или кубическая.
баловство все это.

какая нафиг текстура - поверхности, и только они. только реальная польза от них, если через них же и выводить на экран. если гонять данные по шине - польза сомнительная. оно хоть и агп, но всё равно - если всё в видеопамяти, то гораздо быстрее крутится.


 
Sapersky   (2005-09-26 11:14) [12]

На некоторых картах (интегрированные на i815, например) текстуры аппаратно масштабируются, а поверхности нет.
Ещё, хотя к теме вопроса это не относится - с текстурами возможны дополнительные спецэффекты - вращение, блендинг и прочее.



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1140033420
49 Cent
2006-02-15 22:57
2006.03.05
Может ли Dbgrid отображать подтаблицу?


1-1138891522
ZbarKiy
2006-02-02 17:45
2006.03.05
Перехват закрытия приложения?


6-1132775136
Николай2005
2005-11-23 22:45
2006.03.05
формирование POST запроса в TIdHTTP


10-1114175801
Mx
2005-04-22 17:16
2006.03.05
Как получить объект по интерфейсу?


15-1139642716
Ega23
2006-02-11 10:25
2006.03.05
С Днём рождения! 11 февраля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский