在我的应用程序中,我有一个GtkImage,它必须显示从所选文件处理的图像。所以,在处理程序部分我有:
import numpy as np
from PIL import Image , ImageDraw
from gi.repository import Gtk, GdkPixbuf
. . .
. . .
def on_fitchooserdialog_response(self, menuitem, data=None):
if data == 1:
self.fitlist = self.fitchooser.get_filenames()
# get data from 1st file:
_, self.data = Getdata(self.fitlist[0])
# convert from Fits to 2D array:
pngarray = Fit2png(self.data)
# rescale:
size = tuple(x/2 for x in pngarray.shape)
im = Image.fromarray(pngarray)
im.thumbnail((size[1],size[0]), Image.BICUBIC)
到这里来,一切都好。如果我们这样做:
^{pr2}$预期的图像被粘贴到GtkImage小部件上。 但这是一种丑陋的方式,不是吗?在
所以我试着:
im = im.convert("RGB")
arr = np.array(im).flatten()
pixbuf = GdkPixbuf.Pixbuf.new_from_data(arr,
GdkPixbuf.Colorspace.RGB, False, 8, size[1], size[0], 3*size[1])
但结果是“错误139,分段错误(核心转储)”
我错过了什么?在
这似乎与gdk错误有关:https://bugzilla.gnome.org/show_bug.cgi?id=721497
基本上,这是gdk的python包装器中的一个免费错误,它可能会导致图像失真和/或分段错误。 请参见:https://stackoverflow.com/a/24070152/3528174
你可以在这个问题中找到这样一个图像失真的例子:How to correctly covert 3d array into continguous rgb bytes
相关问题 更多 >
编程相关推荐