Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   modificar imágenes bmp (https://www.clubdelphi.com/foros/showthread.php?t=24067)

RTorres 07-08-2005 02:44:40

modificar imágenes bmp
 
Hola amigos del foro:
Tengo una aplicación en donde necesito cambiar determinados colores de una imágen bmp o jpg, ¿alguien me puede dar una idea de como hacerlo?, gracias anticipadas.

<Sergio> 07-08-2005 18:42:18

Si tienes un JPG tienes que pasarlo a un objeto Tbitmap, del tipo "DIB=Device Independent Bitmap" (HandleType:=bmDIB;) a 8 o 24 bits por pixel según sea conveniente para recién modificarlo. Para convertirlo nuevamente en JPG pasas el bitmap a un objeto TJPEGImage.

Teniendo la imagen en un objeto Tbitmap, accedes a sus pixeles con "scanline[row]". Para copiar una imagen de otros bitmaps a este o viceversa lo haces con su objeto Tcanvas.

Scanline te permite tener acceso rápido a una fila de pixeles del bitmap.

Para mostrar tu bitmap en pantalla usa el evento onpaint del "form":

Este ejemplo copia a memoria de video "elBitmap" ( de acuerdo a la posición y dimensiones del "form") puedes ver los parámetros de BitBlt en la ayuda.

BitBlt(canvas.handle,0,0,width,height,elBitmap.canvas.handle,0,0,SRCCOPY);

RTorres 08-08-2005 00:19:19

modificar imágenes bmp
 
Cita:

Empezado por <Sergio>
Si tienes un JPG tienes que pasarlo a un objeto Tbitmap, del tipo "DIB=Device Independent Bitmap" (HandleType:=bmDIB;) a 8 o 24 bits por pixel según sea conveniente para recién modificarlo. Para convertirlo nuevamente en JPG pasas el bitmap a un objeto TJPEGImage.

Teniendo la imagen en un objeto Tbitmap, accedes a sus pixeles con "scanline[row]". Para copiar una imagen de otros bitmaps a este o viceversa lo haces con su objeto Tcanvas.

Scanline te permite tener acceso rápido a una fila de pixeles del bitmap.

Para mostrar tu bitmap en pantalla usa el evento onpaint del "form":

Este ejemplo copia a memoria de video "elBitmap" ( de acuerdo a la posición y dimensiones del "form") puedes ver los parámetros de BitBlt en la ayuda.

BitBlt(canvas.handle,0,0,width,height,elBitmap.canvas.handle,0,0,SRCCOPY);

Sergio:muchas gracias por responder, aún me queda la duda de como modificar el color de la imágen, por ejemplo: quiero cambiar el color de la camisa de la foto de una persona, cambiando del blanco al azul claro, conservando las sombras y degradaciones. ¿se puede con ésta técnica?

<Sergio> 08-08-2005 16:14:02

Cita:

Empezado por RTorres
Sergio:muchas gracias por responder, aún me queda la duda de como modificar el color de la imágen, por ejemplo: quiero cambiar el color de la camisa de la foto de una persona, cambiando del blanco al azul claro, conservando las sombras y degradaciones. ¿se puede con ésta técnica?

Lo que puse es la forma general de acceder a pixeles de una imagen.

Eso sería mejor hacerlo con un programa de manipulación de imágenes como GIMP (es freeware) www.gimp.org.

Por que sino tendrías dos opciones:

1.- Que la máquina lo haga todo sola, lo que dudo que pueda hacerlo a menos que implementes en varios meses de trabajo lo más avanzado de reconocimiento de imágenes, tratamiento wavelet, I.A., etc para que reconozca que parte de la imagen es la camisa y forme una imágen en canal alpha* con dicha información.

2.- Que el usuario de alguna forma indique (por ejemplo pintando la camisa) un canal ALPHA* (1 byte por pixel) con información de ¿donde está esa camisa?

* (Un bitmap de 8 bits sería suficiente: 255=si es la camisa, 0=definitivamente no es la camisa, el resto de los valores para evitar bordes toscos)

De cualquier forma al final aplicas un filtro de color a tu imagen de acuerdo con el canal alpha. Una forma fácil sería multiplicar la zona por un color azul claro. Otra forma sería hacer cambio de formato de color de RGB a YIQ u otro similar que separa brillo de color y sólo cambiar el color, también de acuerdo al canal alpha.


La franja horaria es GMT +2. Ahora son las 00:27:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi