Ok, I'll modify the plugin in this way: static void evidenzia (GimpDrawable *drawable, GimpPreview *preview) { gint width, height; //dell'immagine su cui va applicato il plugin gint altezza, larghezza; //numero di pixel formanti la palette gint x1, x2, y1, y2; GimpPixelRgn rgn_in, rgn_out; guchar pixel[4]; guchar colore[3]; gint i, channels; gint distanza; GimpParam *return_vals; gint nreturn_vals; gboolean success; if (preview) return; else gimp_progress_init ("Evidenzia Temperatura..."); //Recupero del drawable gimp_drawable_mask_bounds (drawable->drawable_id, &x1, &y1, &x2, &y2); width = x2 - x1; height = y2 - y1; /* Inizializza due PixelRgns, uno per leggere i dati originali, * e l'altro per scrivere i dati modificati. Il secondo sarà * poi applicato all'immaginne alla fine attraverso la chiamata * gimp_drawable_merge_shadow() */ gimp_pixel_rgn_init (&rgn_in, drawable, x1, y1, width, height, FALSE, FALSE); gimp_pixel_rgn_init (&rgn_out, drawable, x1, y1, width, height, preview == NULL, TRUE); //Recupero del numero di canali channels = gimp_drawable_bpp (drawable->drawable_id); //Calcolo delle dimensioni della palette altezza = termogramma.palettey2 - termogramma.palettey1; larghezza = termogramma.palettex2 - termogramma.palettex1; /* * Se l'altezza è più grande della larghezza allora vuol dire che la palette è disposta in verticale. * Se succede il contrario allora la palette è disposta in orizzontale */ if(altezza> larghezza) { g_print("1\n"); //Ottengo il colore alla temperatura specificata. Lo faccio facendo una media tra tutti i colori che si trovano sulla stessa riga distanza = (termogramma.tempselezionata - termogramma.tempmin) * altezza / (termogramma.tempmax - termogramma.tempmin); //Ottengo il pixel corrispondente (coordinate x1 + (x2 - x1)/2, (y2 - distanza)) gimp_pixel_rgn_get_pixel(&rgn_in, pixel, termogramma.palettex1 + (termogramma.palettex2 - termogramma.palettex1)/2, termogramma.palettey2 - distanza); g_print("%i, %i\n", termogramma.palettex1 + (termogramma.palettex2 - termogramma.palettex1)/2, termogramma.palettey2 - distanza); } else {//larghezza> altezza g_print("2\n"); distanza = (termogramma.tempselezionata - termogramma.tempmin) * larghezza / (termogramma.tempmax - termogramma.tempmin); //Ottengo il pixel corrispondete (coordinate (x1 + distanza), y1 + (y2 - y1)/2) gimp_pixel_rgn_get_pixel(&rgn_in, pixel, termogramma.palettex1 + distanza, termogramma.palettey1 + (termogramma.palettey2 - termogramma.palettey1)/2); g_print("%i, %i\n", termogramma.palettex1 + distanza, termogramma.palettey1 + (termogramma.palettey2 - termogramma.palettey1)/2); } for(i = 0; i < 3; i++) { colore[i] = pixel[i]; g_print("%i ",colore[i]); } return_vals = gimp_run_procedure ("gimp-by-color-select", &nreturn_vals, GIMP_PDB_DRAWABLE, drawable->drawable_id, GIMP_PDB_COLOR, pixel, GIMP_PDB_INT32, termogramma.scarto, GIMP_PDB_INT32, 2, GIMP_PDB_INT32, FALSE, GIMP_PDB_INT32, FALSE, GIMP_PDB_FLOAT, 0.0, GIMP_PDB_INT32, FALSE, GIMP_PDB_END); success = return_vals[0].data.d_status == GIMP_PDB_SUCCESS; //si distruggono i parametri per liberare la memoria gimp_destroy_params (return_vals, nreturn_vals); if(success) g_print("Fatto\n"); } the variable success is TRUE after calling the procedure but it select every black pixel instead the values contained in the "colori" vector. It' is a bug or I'm make some mistakes? _________________________________________________________________ Crea i tuoi biglietti da visita con Windows Live Messenger! http://www.messenger.it/biglietti_da_visita.html _______________________________________________ Gimp-developer mailing list Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer