从Blender中的每个像素读取alpha

时间:2014-10-01 21:07:33

标签: python alpha blender rgba bpy

我似乎在使用Blender(使用python)从PNG图像中读取像素RGBA值(特别是alpha值)时遇到问题。

我执行以下操作:

for i in range(0, len(bpy.data.images["name_of_my_png"].pixels), 4):
        print(bpy.data.images["name_of_my_png"].pixels[i:i+4]);

但是我从来没有真正得到它打印出相同输出的每个像素的任何预期结果 - 1.0, 1.0, 1.0, 0.0(我假设它们分别是R,G,B和A的值)。

我很确定png是在blender的缓存中加载的,而且它只是一个常规的RGBA png图像,它有可见和不可见的部分,所以逻辑上我的打印输出应该包含一些变化而不仅仅是{{1不断为每个像素......?

有人能指出我到底做错了什么吗?如何通过Blender-python读取图像的像素数据?也许我使用的是完全错误的方法?

1 个答案:

答案 0 :(得分:2)

您的代码运行正常(使用blender 2.71测试)。

有多种可能的解释,为什么输出看起来不像预期:

  • 垂直翻转:Blender在内部使用OpenGL。在OpenGL中,图像的原点位于图像的左下角(y轴指向上方),而不是左上角(y轴指向下方),正如您可能已经习惯的那样。 /> 这样,代码的打印区域不是左上角,而是图像的左下角4x4角。检查输出是否与图像的左下角匹配。
  • 未保存透明像素:保存图像文件时,许多图像程序不会将颜色存储在透明区域中。您可能想要使用gimp创建一个4x4像素的大图像,另存为png文件,确保选中Save color values from transparent pixels复选框。
  • 预乘alpha(不是您观察的原因):使用预乘颜色格式时,某些算法会获得优雅和性能。不是使用单独的r,g,b,a频道,而是通过将每个颜色通道与Alpha通道r*a, g*a, b*a, a相乘来存储图像。