gpt4 book ai didi

c - 从 GtkDrawingArea 获取坐标的像素颜色

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:30 24 4
gpt4 key购买 nike

这个问题几乎概括了我的问题。我有一个 GtkDrawingArea,它的表面 (cairo_surface_t) 的格式为 CAIRO_FORMAT_INVALID(默认),即该表面数据“不存在或不支持这种格式”。

有没有办法用我选择的任何格式创建我的 GtkDrawingArea 表面的副本?然后我就可以在知道数据格式的情况下查询数据。

最佳答案

由于目标是获取颜色像素,因此以下方法对我有用:

typedef struct{
guint16 red;
guint16 green;
guint16 blue;
guint16 alpha;
} color_struct;

color_struct get_pixel_pixbuf(double x,double y,GdkPixbuf *pixbuf,unsigned char *pixels){
color_struct color;
guchar *p;
p = pixels + ((int)y) * gdk_pixbuf_get_rowstride (pixbuf) + ((int)x) * gdk_pixbuf_get_n_channels(pixbuf);

color.red = p[0];
color.green = p[1];
color.blue = p[2];
color.alpha = p[3];

return color;
}

GtkWidget *drawingarea;
GdkPixbuf *surface_pixbuf = gdk_pixbuf_get_from_drawable(NULL,GDK_DRAWABLE(drawingarea->window),gdk_colormap_get_system(),0,0,0,0,drawingarea->allocation.width,drawingarea->allocation.height);
pixbuf_pixels = gdk_pixbuf_get_pixels (surface_pixbuf);


color_struct *pixel_color = get_pixel_pixbuf(someX,someY,surface_pixbuf,pixbuf_pixels);

由于绘图区域的类型是 xlib(不是图像表面),因此没有必要创建后一种类型的副本。

关于c - 从 GtkDrawingArea 获取坐标的像素颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com