1

我似乎在从 Blender 中的 PNG 图像(使用 python)读取像素 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 已加载到搅拌机的缓存中,并且它只是一个常规的 RGBA png 图像,其中包含可见和不可见的部分,所以从逻辑上讲,我的打印输出应该包含一些变化,而不仅仅是1.0, 1.0, 1.0 and 0.0每个像素不断变化。 .?

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

4

1 回答 1

3

您的代码运行良好(使用 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
于 2014-10-02T16:40:31.007 回答