Почему при отображении файла.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