Python PyGObject 从GdkPixbuf.get_pixels()获取像素

3 投票
2 回答
1572 浏览
提问于 2025-04-18 03:09

我写了一个使用GTK+2(pygtk)的Python程序。现在我想把这个程序更新到GTK+3,所以我得用pyGObject来代替pygtk。
我遇到的问题是,我需要从一个GdkPixbuf.Pixbuf对象中获取单个像素的颜色。
在pygtk中,我可以直接使用Pixbuf.get_pixels_array()来获取一个包含所有像素的数组。
但是在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中它返回的是一个字符串)

谢谢大家的帮助。

2 个回答

1

在我对问题如何将Gdk pixbuf对象转换为numpy数组的回答中,你会发现有两个函数,可以把GdxPixbuf转换成numpy数组,也可以把numpy数组转换回去。一旦你把数据放进numpy数组里,处理这些数据就简单多了。

2

这不是一个字符串,而是一个字节数组。你可以像从列表中获取值一样,使用 mybyte[2:4] 来获取一些值(整数)。如果你打印出来,确实会显示 chr() 的值。要注意图像的类型,并检查“字符串”的长度:对于 PNG 格式,每个像素有 4 个值(RGBA),而对于 'RGB' 的 JPEG 格式,每个像素有 3 个值,对于 'L' 格式则只有 1 个值。这些值的范围通常在 0 到 255 之间。
另外,值得注意的是,这些值并不是分开的,所以 JPEG 格式的第一个像素的 RGB 值分别在索引 0、1、2,而第二个像素的 RGB 值则在索引 3、4、5,以此类推。

撰写回答