Почему при отображении файла.png в оттенках серого в Psychtoolbox (с альфа-каналом) изображение отображается ярко-красным?

В настоящее время я готовлю несколько изображений в градациях серого.png, которые будут отображаться в Psychtoolbox. Все эти файлы.png имеют прозрачный фон, поэтому я добавил альфа-слой в матрицу файлов следующим образом:

% sets up for the alpha
Screen('BlendFunction', w, 'GL_SRC_ALPHA', 'GL_ONE_MINUS_SRC_ALPHA');

[pngImage,~,alpha] = imread('image.png'); % read in the image
pngImage(:,:,4) = alpha; % add in the alpha channel
pngTexture = Screen('MakeTexture',w, pngImage); % create image texture

При отображении этих изображений фон действительно прозрачен. Тем не менее, они также представлены как ярко-красный вместо оттенков серого (ссылка на изображение). Когда я закомментирую строку кода, которая добавляется в альфа-канал, фон перестает быть прозрачным, но в оттенках серого (ссылка на изображение).

Некоторые изображения в наборе присутствуют просто отлично, без проблем. Эти изображения были обработаны в пакетном режиме в Photoshop. Изображения, которые представляют проблему, являются изображениями, которые были обработаны вручную в GIMP. Тем не менее, весь набор изображений представлен просто отлично в Psychopy. (Написание этого проекта в Psychopy не вариант, из-за временных ограничений и некоторых специфических функций MATLAB.)

Если бы мне пришлось предположить, с моим крайне ограниченным знанием, я бы сказал, что добавление четвертой 2D-матрицы в матрицу изображения вызывает аргумент, который умножает значения цвета. Тем не менее, я понятия не имею, как. У кого-нибудь есть мысли?

1 ответ

Решение

Поскольку вы не добавили каналы G и B, значит, они равны нулю!

Попробуй это:

pngImage(:,:,2) = pngImage(:,:,1); 
pngImage(:,:,3) = pngImage(:,:,1); 
pngImage(:,:,4) = alpha; % add in the alpha channel
Другие вопросы по тегам