Programación General > Visual C++

 Convertir Una Imagen Rgb A Escala De Grises

<< < (2/2)

drd:
Yo lo decía más que nada porque se quejaba del tiempo que tardaba, yo las uso para otras cosas y en eso no se pierde nada de tiempo, pero vosotros sabéis mucho más que yo, desde luego  :D

Eternal Idol:

--- Cita de: "drd" --- Yo lo decía más que nada porque se quejaba del tiempo que tardaba, yo las uso para otras cosas y en eso no se pierde nada de tiempo, pero vosotros sabéis mucho más que yo, desde luego  :D
--- Fin de la cita ---
Bueno, en lo que tarda es en mostrarla en pantalla en realidad.

JuanK:
Puede ya ser muy tarde ....
pero ahi va.

--- Código: Text --- double bn; 
Realmente debe ser de tipo double? ... muy sospechoso...
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->
for(int i=0; i<Imagen->Width; i++){
    for (int j=0; j<Imagen->Height; j++){
         color=Imagen->GetPixel(i,j);
         bn=(double) ((color.R*30)+(color.G*59)+ (color.B*11));
        ColorBN=Color::FromArgb(bn,bn,bn);
         ImagenBN->SetPixel(i,j,ColorBN);
    }
}<!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

con esto ya te estas matando solito....

si te interesa la precisión del gris.. ok hazlo , pero lo mas rápido aunque no tan preciso es simplemente volver iguales al r al g y al b, toma como referencia el valor medio (o el promedio) entre los tres y sale.

Usando GetPixel y SetPixel siempre sera lento, lo mejor es que (ya presumo que estas usando CLR) es que del objeto Bitmap hagas un lockbits y luego recorras toda esta info (ojo con los bytes de padding) para hacer las operaciones de modificación que te señalé para convertir el color, o incluso la de los porcentajes... ahí ya habrás ganado MUCHO...

Geo:
También voy por la idea de que el cuello de botella son GetPixel y SetPixel.

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa