C/Visual C - Tratamiento de imágenes

 
Vista:

Tratamiento de imágenes

Publicado por Carlos Sanz (4 intervenciones) el 04/04/2002 07:11:16
Hola a todos.
Como se puede aumentar la tonalidad azul o roja de un bitmap??? pero a toda leche.
me explico:
si el bitmap mide 50x50

for(int x=0; x<50; x++)
for(int y=0; y<50; y++)
{
SetPixel(hDC,x, y, GetPixel(hDC,x,y) | 0xFFFF00 ); // Rojo
SetPixel(hDC,x, y, GetPixel(hDC,x,y) | 0x0000FF); / /Azul
}

Nota* Extraigo el color y aumento el rojo al maximo dejando el verde y el azul como estaban. O al contrario si pretendo hacerlo con el Azul.

Esto funcionar funciona, pero es muy lento.
Necesito algo q sea mucho mas rapido, cuanto mas mejor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Tratamiento de imágenes

Publicado por Googol (255 intervenciones) el 08/04/2002 08:22:47
Esto no te servirá para nada, pero por intentarlo...
El problema que tienes es que te toca llamar al API todo el tiempo, y claro, es muy lento. No sé si desde el propio API de Windows habrá una forma más fácil. Pero lo que sí sé que se puede hacer es utilizar DirectDraw (una parte de Direct X) Con DirectDraw, puedes construir una "superficie" (un buffer con una imagen, vamos) a partir de un Canvas del API. Y a través de la superficie de DirectDraw, puedes acceder directamente a los bytes del buffer, y cambiarlos a tu antojo. Así, para acceder a un pixel no necesitarías usar el API de Windows, y podrías recorrer todos los píxeles mucho más rápidamente. El problema: tienes que usar Direct X (una complicación añadida si no lo estás haciendo ya), y que el procedimiento para aumentar el nivel de rojo o azul NO es independiente del modo de video (tendrías que tener cuidado en el modo de acceder a los píxeles según la profundidad de color que se esté usando).

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Tratamiento de imágenes

Publicado por Jose (1 intervención) el 08/04/2002 09:39:16
Otra forma, sin utilizar DirectX solo el API de windows, es que construyas un bitmap, hagas en el lo que desees, (hasta utilizar ensamblador para maxima velocidad) y al final lo vuelques al dispositivo de windows, pero no pixel a pixel, sino con una funcion de copia.

Ahora no recuerdo las funciones del API pero son faciles de hallar en la documentacion. Yo lo he hecho y he conseguido una velocidad de 300 cuadros por segundo (usando 320x240 y 32 bits de color)

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar