我正在尝试在 Windows 中使用 Python 中的 GdkPixbuf 将一些像素保存到文件中。我正在使用优秀的PyGI AIO (3.14.0)二进制文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from gi.repository import Gtk, Gdk, GdkPixbuf
w, h, n = 4, 4, 4
data = bytearray(b'\x00\x00\x00\xff' * w * h)
#data = GLib.Bytes.new(b'\x00\x00\x00\xff' * w * h).get_data()
#import numpy as np
#data = np.zeros((w,h,n), np.uint8)
#data[:,:,3] = 255
#data = data.tostring()
options = {}
pixbuf = GdkPixbuf.Pixbuf.new_from_data(data, GdkPixbuf.Colorspace.RGB, True, 8, w, h, n*w, None, None)
pixbuf.savev('screenshot.bmp', 'bmp', options.keys(), options.values())
放大后的结果如下:
显然,前几个像素已损坏。损坏像素的数量似乎因图像尺寸而异。但是,一些像素设法保持完整。我的代码中一定有错误,或者内存以某种方式损坏。可以对更大的图像进行编码,并且错误总是出现在前几个像素中。这可能是字符串编码问题还是什么?
编辑:我在 OS X 上测试过这个程序,错误非常相似。因此,这似乎是 Python 绑定到 GdkPixbuf 的一个普遍问题,可能与this相关。这是由脚本的修改版本生成的更大的 PNG。红色和绿色线的网格是预期的输出,而图像上半部分的像素只是噪声。