Форум программистов, компьютерный форум CyberForum.ru

альфа-наложение цвета - C++

Восстановить пароль Регистрация
 
positron
22 / 7 / 1
Регистрация: 22.04.2010
Сообщений: 105
08.10.2010, 18:10     альфа-наложение цвета #1
есть массив пикселей, рисуется несколько графиков со сглаживанием (Графики рисуются последовательно). Нужно в местах пересечения пикселей использовать альфа-наложение, т.е.
есть цвет А(0x8800FF00) и В(0x88880022) в результате наложения должны получить нечто вроде С(0xFF448811).
Какой формулой связать
A+B=С??
С использованием побитовых операций или мб по-другому
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2010, 18:10     альфа-наложение цвета
Посмотрите здесь:

Наложение текста на картинку C++
C++ Альфа-прозрачность формы
Шифры (С++). Наложение гаммы. C++
С++ Builder Циклы с условием (при вводе адреса цвета (например, 0 255 0) выдавать имя цвета) C++
Альфа-бета отсечения C++
Как записать альфа в математическом выражении C++
C++ Как считается угол альфа
Дана гипотенуза с, и угол альфа прямоугольника, найти площадь и периметр C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
08.10.2010, 23:28     альфа-наложение цвета #2
цвет в формате RGBA?
если так то складывать во первых надо по байтам R G B
например такой функцией Ra = Ra/2 + Rb*float(Ab/0xFF)/2;

Ra - R Для пикселя A
Rb R Для пикселя B
Ab - альфа для пикселя B
positron
22 / 7 / 1
Регистрация: 22.04.2010
Сообщений: 105
09.10.2010, 02:30  [ТС]     альфа-наложение цвета #3
DeadRipper, премного благодарен). Простое решение, зато результат какой)) Не то что некоторые другие "алгоритмы" (к примеру):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* alpha blend routine */
unsigned int AlphaBlend(const unsigned int bg, const unsigned int src)
{
   unsigned int a = src >> 24;    /* alpha */
 
   /* If source pixel is transparent, just return the background */
   if (0 == a) 
      return bg;
 
   /* alpha blending the source and background colors */
   unsigned int rb = (((src & 0x00ff00ff) * a) +  
      ((bg & 0x00ff00ff) * (0xff - a))) & 0xff00ff00;
   unsigned int    g  = (((src & 0x0000ff00) * a) + 
      ((bg & 0x0000ff00) * (0xff - a))) & 0x00ff0000;
 
    return (src & 0xff000000) | ((rb | g) >> 8);
}
Добавлено через 1 час 32 минуты
И наверное лучше
C++
1
2
3
R = Ra + Rb*float(Ab/0xFF)
if(R>255)
    R=255;
Потому что если делить на 2, то цвета получаются вполовину яркие...
Yandex
Объявления
09.10.2010, 02:30     альфа-наложение цвета
Ответ Создать тему
Опции темы

Текущее время: 13:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru