2014-04-17 66 views
1

我已经使用GTK + 2(pygtk)编写了一个python程序。现在我想更新程序到GTK + 3,所以我必须使用pyGObject而不是pygtk。
我的问题是,我必须从GdkPixbuf.Pixbuf对象上的单个像素获取颜色。
在pygtk中,我可以使用Pixbuf.get_pixels_array()来获取包含所有像素的n数组。
在pyGObject中没有Pixbuf.get_pixels_array(),所以我必须使用Pixbuf.get_pixels(),它返回一个字符串。
有谁知道如何从这个字符串中获取单个像素?

(在C Pixbuf.get_pixels_array()返回一个指针,所以你可以这样做:http://developer.gimp.org/api/2.0/gdk-pixbuf/gdk-pixbuf-gdk-pixbuf.html#image-data,但是在Python它返回一个字符串)

感谢您的帮助。Python PyGObject从GdkPixbuf.get_pixels获取像素

回答

0

它不是一个字符串,它是一个字节数组。您可能会从列表中获取值(int):mybyte [2:4];如果你打印这个,是的,chr()值是显示的。在图像类型时要小心并检查“字符串”的长度:对于png,每个像素有4个值(RGBA),对于'RGB'jpeg - 3,对于'L' - 1'。值在范围0 -255,照常。 P.S:这些值不是以频段分割的,所以jpg中的像素1在索引0处有RGB,3,4,5处有像素2等等

+0

好的......那很奇怪。我可以像这样访问各个像素,但看起来像素每行有2个额外的字节。只有当pixbuf是我的第一台显示器(768x1366)的屏幕截图时才会发生这种情况,但是不会出现在我的1050x1680显示器的屏幕截图中。即使我只连接了一台显示器。 – freundTech

+0

我发现了更多:我认为它只适用于,如果图像的宽度可以分为4.不知道为什么。我认为这是一个错误... – freundTech

+0

不,它不是一个错误。这可能是“大步”,但不能确定没有看到任何事情。你可以把数据放在一个PIL图像中并修改那些额外的东西,可能来自哪里? – cox