Псевдо прозрачные изображения - PullRequest
0 голосов
/ 04 мая 2010

Для работы в университете мы программируем на довольно неизвестном языке Modula 2, в котором отсутствует основная графическая поддержка.

Мне было интересно, как добиться эффекта «прозрачности» для изображений, я подумал, что это будет работать такthis:

Создайте 2D-массив для фоновой области изображения, заполненной цветами разных пикселей в этой области, создайте еще один 2D-массив изображения с цветами каждого изображения, а затем объедините пиксель.цвета и нарисуйте различные «новые цвета» на соответствующем месте.

Что меня интересует: как мне объединить цвета (шестнадцатеричные числа) просто:

( colour1 + colour2 ) / 2 

?

Спасибо за вашу помощь !!

1 Ответ

1 голос
/ 02 января 2011

Нет, вы бы не усредняли числа.Предполагая, что они хранятся в следующем виде:

RRGGBB

, усреднение может привести к странным вещам из-за перелива между компонентами цвета.То, что вы хотите сделать, это усреднить каждый отдельный компонент (то есть красный, зеленый и синий), а затем объединить их вместе.В псевдокоде (извините, я не знаю по модулю 2):

for each pixel:
    color1 := <original background color>
    color2 := <new color>
    resultred := (color1.redpart + color2.redpart) / 2
    resultgreen := (color1.greenpart + color2.greenpart) / 2
    resultblue := (color1.bluepart + color2.bluepart) / 2
    result := combineRGB(resultred,resultgreen,resultblue)
    draw result onto pixel
...