我目前正在准备一些将在Psychtoolbox中显示的灰度。png图像。这些。png文件都有透明的背景,所以我在文件矩阵中添加了alpha图层,如下所示:
% 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
显示这些图像时,背景确实是透明的。然而,它们也呈现为亮红色而不是灰度(链接到图像)。当我注释掉添加alpha通道的代码行时,背景不再是透明的,而是灰度的(链接到图像)。
集合中的一些图像呈现得很好,没有问题。这些图像在Photoshop中进行了批量处理。显示问题的图像似乎是在GIMP中手工处理的图像。然而,整个图像集在Psychopy中呈现得很好。(由于时间限制和需要一些matlab特定的功能,不能在Psychopy中编写此项目。)
如果我不得不猜测,以我的极其有限的知识,我会说,将第四个2D矩阵添加到图像矩阵中会引发倍增颜色值的争论。然而,我不知道怎么做。有人有什么想法吗?
因为你没有添加G和B通道,所以它们是零!
试试这个:
pngImage(:,:,2) = pngImage(:,:,1);
pngImage(:,:,3) = pngImage(:,:,1);
pngImage(:,:,4) = alpha; % add in the alpha channel