Форум программистов, компьютерный форум, киберфорум
Наши страницы
Теория и практика программирования
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
John Paramol
1

программная эмуляция наложения с использованием альфа канала

23.05.2006, 00:15. Просмотров 2889. Ответов 3
Метки нет (Все метки)

Привет.
Делаю программное альфа наложение в DDRAW1 (аппаратное недоступно). Пытаюсь оптимизировать алгоритм наложения двух изображений глубиной 32 бита (24-битный цвет, 4 байт - альфа канал).
Вроде бы с изначально заготовленной таблицей значений цветов:
C++
1
2
3
4
5
BYTE Tab[256][256][256];//what a huge table!
for(int a=0; a<256; ++a)
  for(int d=0; d<256; ++d)
    for(int s=0; s<256; ++s)
      Tab[a][d][s] = (BYTE)(s*a/255.+d*(255-a)/255.);
работает быстрее, чем с реальным просчетом:
C++
1
DestCol = DestCol*Alpha/255 + SourceCol*(255-Alpha)/255
Формулу, конечно, можно оптимизировать:
C++
1
DestCol = (DestCol*Alpha + SourceCol*(~Alpha))/255
, но, все равно, считать дольше, чем адресовать цвет из таблицы.
Вроде бы оптимизировал адресацию с помощью ассемблерных вставок. Но работает не намного быстрее C++-эквивалента.
Куда еще больше оптимизировать, незнаю. Может быть кто-то делал такое, или, может быть, не стоит пытаться - все равно тормоза жесткие будут?
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2006, 00:15
Ответы с готовыми решениями:

Редактирование альфа канала (для png)
Доброго времени суток. :wall:Возник вопрос: как можно редактировать альфа канал(слой)(например в...

Совместить изображения с соблюдением Альфа канала
Как совместить изображения соблюдая альфа канал???

полупрозрачный куб (альфа канала в вершинах)
Здравствуйте! Хотел создать куб на плоскости, при этом чтобы куб был полупрозрачным. Куб с...

Анимация плавного изменение альфа канала у цвета
Здравствуйте. Как через таймер сделать плавное изменение альфа канала сначало в 1 сторону потом...

Плавная смена изображений с поддержкой альфа канала
Ну в общем вопрос в теме...подскажите пожалуйста как реализовать плавную смену изображений с...

3
John Paramol
23.05.2006, 01:26 2
точнее, даже так
C++
1
DestCol = (DestCol*Alpha + SourceCol*((BYTE)~Alpha))>>8
тормозит
999Misha999
0 / 0 / 0
Регистрация: 14.08.2006
Сообщений: 8
28.08.2006, 17:45 3
John Paramol (22.05.2006)
Привет.



Делаю программное альфа наложение в DDRAW1 (аппаратное недоступно). Пытаюсь оптимизировать алгоритм наложения двух изображений глубиной 32 бита (24-битный цвет, 4 байт - альфа канал).



Вроде бы с изначально заготовленной таблицей значений цветов:

BYTE Tab[256][256][256];//what a huge table!

for(int a=0; a<256; ++a)

for(int d=0; d<256; ++d)

for(int s=0; s<256; ++s)

Tab[a][d][s] = (BYTE)(s*a/255.+d*(255-a)/255.);

работает быстрее, чем с реальным просчетом:

DestCol = DestCol*Alpha/255 + SourceCol*(255-Alpha)/255

Формулу, конечно, можно оптимизировать:

DestCol = (DestCol*Alpha + SourceCol*(~Alpha))/255,

но, все равно, считать дольше, чем адресовать цвет из таблицы.



Вроде бы оптимизировал адресацию с помощью ассемблерных вставок. Но работает не намного быстрее C++-эквивалента.

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




Офигеть...
0
John Paramol
01.09.2006, 00:28 4
Миша, пока ты офигевал, я давно уже решил проблему

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

01.09.2006, 00:28
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2006, 00:28

Разбивка GIF на PNG с сохранением альфа канала
Собственно в названии темы и сама суть вопроса Нашел алгоритм разбивки GIF но одно большое НО -...

*.png файл загружается без альфа-канала
Всем привет! У меня проблема, при загрузке *.png файла с альфа каналом он не распознаётся. Для...

Баг с цветом при настройке альфа-канала
Здравствуйте. Столкнулся с такой проблемой. Написал простой шейдер для света и задал такие...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru