PDA

Просмотр полной версии : Сложение и вычитание каналов цветов в BitmapData


Котяра
04.12.2009, 16:24
Задача:
есть исходный задник back.
есть степень затемнения ( от 0 до 255) darkness;
есть чёрно-белая маска. mask

Необходимо получить исходную битмапу
каждый пиксель которой следующего вида (условный код)

delta:uint = darkness-maskPixel(i,j).RED;// положительное
destPixel(i,j).RED = backPixel(i,j).RED - delta
destPixel(i,j).GREEN = backPixel(i,j).GREEN - - delta
destPixel(i,j).BLUE = backPixel(i,j).BLUE - delta

maskPixel(i,j).RED==maskPixel(i,j).GREEN==maskPixel(i,j).BLUE
// т.к. изображение монохромное

перебирать при помощи getPixel/setPixel конечно же нельзя..
хочется это сделать при помощи copyChannell/merge итп..
но мозг уже сломал)

cleptoman
04.12.2009, 20:25
а что есть степень затемнения? градация всех 3 каналов от 0 до 255?

SamFR
04.12.2009, 23:06
А чем PixelBender не угодил? Там это делается элементарно, да и в плане производительности, наверное, лучшее решение.

Котяра
07.12.2009, 10:10
по сути - мне необходимо сделать затемнение с маской. затемнение - это уменьшение каждого канала фона.
маска - это уменьшение затемнения для конкретного пикселя маски.
Пиксельбендер не пробовал, т.к. рассчитывал решить стандартными средствами этот вопрос. сейчас делаю так:
чёрный прямоугольник (alpha = darkness) в его альфа канал сливаю R канал маски.
затем накладываю полученную маску на бэкграунд.
это немного не то что я хотел.т.к. не получается одной битмапы. можно конечно еще делать draw, но наверное есть другой метод, который я не нащупал пока..

iflamberg
07.12.2009, 11:48
это ты что-то типа динамического освещения хочешь сделать? Типа, как фонариком светят?

Котяра
07.12.2009, 15:28
да. точно так.