सवाल काफी हद तक मेरे सवाल का सार है। मेरे पास एक GtkDrawingArea है और इसकी सतह (cairo_surface_t) का प्रारूप CAIRO_FORMAT_INVALID (डिफ़ॉल्ट द्वारा) है, यानी उस सतह के डेटा के लिए "ऐसा कोई प्रारूप मौजूद नहीं है या समर्थित नहीं है"।

क्या मेरे द्वारा चुने गए किसी भी प्रारूप के साथ मेरी GtkDrawingArea सतह की प्रतिलिपि बनाने का कोई तरीका है? तब मैं डेटा को इसके प्रारूप को जानने के लिए क्वेरी कर पाऊंगा।

1
Carlos López-Camey 5 अगस्त 2011, 09:35

1 उत्तर

सबसे बढ़िया उत्तर

चूंकि लक्ष्य रंग पिक्सेल प्राप्त करना था, निम्नलिखित ने मेरे लिए काम किया:

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 (छवि सतह नहीं) है, इसलिए बाद वाले प्रकार की प्रतिलिपि बनाना आवश्यक नहीं था।

0
Carlos López-Camey 10 अगस्त 2011, 08:09