Thanks to all for the useful help... I'll write this function but it return a
fatal error (SEGMENTATION FAULT) and it don't make the selection...
Here is the code:
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; 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"); <- for debug purpose
//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", termogramma.palettex1 +
(termogramma.palettex2 - termogramma.palettex1)/2, termogramma.palettey2 -
distanza); } else {//larghezza > altezza
//g_print("2\n"); debug 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", termogramma.palettex1 + distanza,
termogramma.palettey1 + (termogramma.palettey2 - termogramma.palettey1)/2);
debug } for(i = 0; i < 3; i++) colore[i] = pixel[i];
return_vals = gimp_run_procedure("gimp_by_color_select",
&nreturn_vals,
GIMP_PDB_DRAWABLE, drawable, //drawable
GIMP_PDB_COLOR, colore, //color
GIMP_PDB_INT32, termogramma.scarto, //threshold
GIMP_PDB_INT32, 2, //operation
GIMP_PDB_INT32, 0, //antialiasing
GIMP_PDB_INT32, 0,
GIMP_PDB_INT32, 0,
GIMP_PDB_FLOAT, 0.0, GIMP_PDB_INT32, 0);
}
What's wrong with this code?
_________________________________________________________________
Crea i tuoi biglietti da visita con Windows Live Messenger!
http://www.messenger.it/biglietti_da_visita.html_______________________________________________
Gimp-developer mailing list
[email protected]
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer