Programación General > Visual C++
Convertir Una Imagen Rgb A Escala De Grises
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
[*] Página Anterior
Ir a la versión completa