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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.10.2009, 22:16
hackroute hackroute вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 5
Репутация: 10
Лампочка помогите с графикой

в мою прогу надо добавить преобразование в 16цветный рисунок смещение Royd Steindberg как в XnView - подскажите как это сделать, если это возможно, и еще вопрос: если я преобразую через канвас или битмап(сканлайн) то это очень долго - каким образом работает XnView - ведь все преобразования на весь рисунок моментальны
Ответить с цитированием
  #2  
Старый 01.11.2009, 01:02
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще, если для очень быстроты, то надо переходить к WinAPI.
получаешь контекст, битмап, а дальше сам шуруешь по памяти на ассемблере. Тогда будет быстро. Сканлайн, естественно, достаточно медленная штука. Хотя, через него проще писать и для начала можешь реализовать через него, что бы отладить сам алгоритм.
Ответить с цитированием
  #3  
Старый 01.11.2009, 11:50
hackroute hackroute вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

сча попробую может что получиться, пример хоть какой нибудь был бы не лишним а то с графой через АПИ я еще не работал
Ответить с цитированием
  #4  
Старый 01.11.2009, 12:09
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Что за эффект такой "смещение Royd Steindberg" может он по другому называется. Можно подробнее.
Цитата:
Сообщение от lmikle
Сканлайн, естественно, достаточно медленная штука
Что может быть быстрее прямой работы с памятью? Разве что программная реализация.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #5  
Старый 01.11.2009, 12:13
hackroute hackroute вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

в XnView есть "преобразовать в цветное, нажимаешь, выбираешь в 16-цветный, там есть "смещение Royd Steindberg", что такое контекст и как к нему обращаться подскажите)
Ответить с цитированием
  #6  
Старый 01.11.2009, 14:20
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

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

А вообще, лучше поискать готовые библиотеки, если порыться в той же XnView, думаю можно найти нужные dll и экспортировать их них функции.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #7  
Старый 01.11.2009, 16:18
hackroute hackroute вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

алгоритмы писать я мостак, только если сканлайн это самый быстрый способ то почему мой алгоритм работает 1 мин а в икснвьюв он проходит за 5 сек) может фильтры и преобразования в икснвьюв используют какие то технологии типо директикс или делфиикс или еще что.
Ответить с цитированием
  #8  
Старый 01.11.2009, 17:22
Аватар для 0nni
0nni 0nni вне форума
Начинающий
 
Регистрация: 13.12.2008
Адрес: Туапсе
Сообщения: 161
Репутация: 20
По умолчанию

Цитата:
Сообщение от hackroute
алгоритмы писать я мостак
Цитата:
Сообщение от hackroute
мой алгоритм работает 1 мин а в икснвьюв он проходит за 5 сек)
Первое противоречит второму =)

Цитата:
Сообщение от hackroute
может фильтры и преобразования в икснвьюв используют какие то технологии типо директикс или делфиикс или еще что.
Уверен на 100% что ничего кроме процессора (даже без mmx и прочего) там не участвует.

В Windows есть механизмы для работы с палитрой, но того что ты хочешь они не делают, все придется писать руками, или искать готовое решение.
__________________
...сказал, и загрустил от бесспорной своей правоты
Ответить с цитированием
  #9  
Старый 01.11.2009, 21:17
hackroute hackroute вне форума
Прохожий
 
Регистрация: 31.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

>>Сообщение от hackroute
>>алгоритмы писать я мостак
>>
>>Цитата:Сообщение от hackroute
>>мой алгоритм работает 1 мин а в икснвьюв он проходит за 5 сек)

>Первое противоречит второму =)

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

var ds: tdibsection; p: pointer;
GetObject(image2.Picture.Bitmap.Handle, SizeOf(DS), @DS);
p := pointer(ds.dsBm.bmBits); - указатель на начало растра, получилось быстрее чем сканлайн(и темболее канвас.пиксельс) - теперь алгоритм работает 5 сек - всем спасиб

Последний раз редактировалось hackroute, 02.11.2009 в 11:24.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter