Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SetDIBitsToDevice+alpha shannel


Q_Q ©   (2011-08-05 11:31:00) 

Здравствуйте! Эта функция в качестве буффера принимает rgba массив. Заполненый массив имеется. Но функция при выводе альфу игнорирует :(

Как лечить?

BITMAPINFO* bm_info = new BITMAPINFO;
       bm_info->bmiHeader.biSize = 40;
       bm_info->bmiHeader.biSizeImage = 0;
       bm_info->bmiHeader.biWidth = Buff.Width;
       bm_info->bmiHeader.biHeight = -Buff.Height;
       bm_info->bmiHeader.biPlanes = 1;
       bm_info->bmiHeader.biBitCount = 32;
       bm_info->bmiHeader.biCompression = BI_RGB;

....................................

SetDIBitsToDevice(hDC, x, y, Buff.Width, Buff.Height, 0, 0, 0, Buff.Height, ptr_buff_paint, bm_info, DIB_RGB_COLORS);


Q_Q   (2011-08-05 18:08:00) [1]

Да знаю, знаю. Тупость в пятницу вечером напала )) втыкнуть не получаца


Псарь   (2011-08-05 18:05:00) [2]


> Q_Q   (05.08.11 17:29) [11]


CreateDIBSection, SelectObject.


Q_Q   (2011-08-05 17:49:00) [3]


> - между прочим, теоретически - маска каналов может быть
> и $000003FF, $000FFC00, $3FF00000...Я правда не пробовал,
>  но в X Window System поддержку подобной экзотики видел.
> ..


Это совсем извращение. Не, если конечно это собственный формат... или отдельная маска - тады да


Q_Q   (2011-08-05 17:29:00) [4]


> Может функция AlphaDIBBlend поможет?

Погуглил. Говорят заголовочный есть, функции нету. Призрак )


> Создавай DIB (Указываю буффером Ваш массив), помещай в DC.


В эту сторону сейчас и копаю + BitBlt. Идет туго. Так что желающим помочь  буду благодарен.


han_malign   (2011-08-05 12:41:00) [5]


> а зачем все эти понты с 32-ух битным массивом?

- между прочим, теоретически - маска каналов может быть и $000003FF, $000FFC00, $3FF00000...
Я правда не пробовал, но в X Window System поддержку подобной экзотики видел...


Псарь   (2011-08-05 12:41:00) [6]

*Указываю = Указывай


Псарь   (2011-08-05 12:40:00) [7]


> Q_Q   (05.08.11 11:31)  


Может функция AlphaDIBBlend поможет?


> угу понятно. А может подскажете функцию выполняющую обратное
> действие по отношению к сабжевой. ТЕ. с канвы в массив.
> Понятно что кроме getpixel


Создавай DIB (Указываю буффером Ваш массив), помещай в DC.
Теперь можешь манипулировать с данными через указатель, а рисовать обычным блиттом. Очень удобно.


Sapersky   (2011-08-05 12:32:00) [8]

А может подскажете функцию выполняющую обратное действие по отношению к сабжевой. ТЕ. с канвы в массив.

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


sniknik   (2011-08-05 12:21:00) [9]

>  и удобный в обращении размер даже без использования альфы. Видеокарты только с 32 битами и работают
+ автоматическое выравнивание на границу четного блока... т.е. оптимизация скорости в ущерб размеру... (как обычно и бывает либо одно либо другое ;)


Q_Q   (2011-08-05 12:12:00) [10]

угу понятно. А может подскажете функцию выполняющую обратное действие по отношению к сабжевой. ТЕ. с канвы в массив. Понятно что кроме getpixel


Sapersky   (2011-08-05 12:05:00) [11]

Не знаю. Может, хотели сделать поддержку альфы, но по каким-то причинам не получилось.
Опять же, 4 байта на пиксель - более "круглый" и удобный в обращении размер даже без использования альфы. Видеокарты только с 32 битами и работают, хотя 4-й байт часто "пропадает".
Вывод битмапа на экран на некоторых картах быстрее в варианте 32->32 (чем 24->32), меньше преобразований.


Q_Q   (2011-08-05 11:42:00) [12]

мдааа....
а зачем все эти понты с 32-ух битным массивом?


Sapersky   (2011-08-05 11:37:00) [13]

GDI вообще с альфой не дружит, за исключением отдельных специально обученных функций (AlphaBlend).


Q_Q   (2011-08-05 11:32:00) [14]

В качестве приемника канва формы


Наверх

Титульная страница Поиск, карта сайта Написать письмо