Lo que estoy tratando de hacer es tomar esta función llamada …
assign_sum_to_pixel(¤t_pixel, sum);
y reemplazarlo con el código real que llama que es este …
/* * assign_ sum_ to_ pixel - Computes averaged pixel value in current_pixel */ static void assign_ sum_ to_ pixel (pixel *current_ pixel, pixel_ sum sum) { current_ pixel->red = (unsigned short) (sum.red/sum.num); current_ pixel->green = (unsigned short) (sum.green/sum.num); current_ pixel->blue = (unsigned short) (sum.blue/sum.num); return; }
Lo que se me ocurrió fue esto …
/* * mysmooth1 - my smooth1 */ char mysmooth1_descr[] = "my smooth1: My smooth1"; void mysmooth1(int dim, pixel *src, pixel *dst) { int i, j; int ii, jj; pixel_ sum sum; pixel current_ pixel; for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { initialize_ pixel_ sum (&sum); for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++) for(jj = max(j-1, 0); jj red = (unsigned short) (sum.red/sum.num); current_ pixel->green = (unsigned short) (sum.green/sum.num); current_ pixel->blue = (unsigned short) (sum.blue/sum.num);*** ***(These three lines above are the lines I inserted which is where the function call use to be)*** dst[RIDX(i, j, dim)] = return; } } }
pero … por alguna razón, cuando ejecuto el código no funciona, me da este error
kernels.c:456: error: invalid type argument of â->â kernels.c:457: error: invalid type argument of â->â kernels.c:458: error: invalid type argument of â->â kernels.c:459: warning: statement with no effect
que es justo donde agregué el nuevo código …
current_ pixel->red = (unsigned short) (sum.red/sum.num); current_ pixel->green = (unsigned short) (sum.green/sum.num); current_ pixel->blue = (unsigned short) (sum.blue/sum.num);
alguien puede decirme si estoy haciendo algo mal … ¿Me faltan corchetes en algún lugar? ¿No estoy inicializando mis variables correctamente? se supone que el retorno no se encuentra en la parte inferior igual a dst[RIDX(i, j, dim)]
cualquier ayuda, comentarios y sugerencias serían muy apreciados. Gracias.
Su current_pixel
es un pixel
, mientras que anteriormente pasó ¤t_pixel
, un pixel *
(puntero a píxel). Por lo tanto, ahora necesita usar current_pixel.red
(con un punto), no current_pixel->red
(con una “flecha que señala hacia la derecha”), que necesita un puntero en el lado izquierdo de la flecha; Etcétera.
No en línea con la mano. Use la palabra clave en línea o mejor, deje que el comstackdor decida.
Si debe forzar el ingreso, sería mejor utilizar una macro.
#define ASSIGN_SUM_TO_PIXEL (current_pixel, sum)\ do {\ current_pixel.red = (unsigned short) (sum.red/sum.num);\ current_pixel.green = (unsigned short) (sum.green/sum.num);\ current_pixel.blue = (unsigned short) (sum.blue/sum.num);\ } while(0)
entonces utilízalo como
for (i = 0; i < dim; i++) for (j = 0; j < dim; j++) { initialize_pixel_sum (&sum); for(ii = max(i-1, 0); ii <= min(i+1, dim-1); ii++) for(jj = max(j-1, 0); jj <= min(j+1, dim-1); jj++) accumulate_sum(&sum, src[RIDX(ii, jj, dim)]); { ASSIGN_SUM_TO_PIXEL (current_pixel, sum); ...
Al menos de esa manera el código se mantiene separado en la fuente.