Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2005
RTorres RTorres is offline
Registrado
 
Registrado: ene 2005
Posts: 9
Poder: 0
RTorres Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 07-08-2005
<Sergio> <Sergio> is offline
Miembro
 
Registrado: sep 2004
Posts: 72
Poder: 20
<Sergio> Va por buen camino
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);
Responder Con Cita
  #3  
Antiguo 08-08-2005
RTorres RTorres is offline
Registrado
 
Registrado: ene 2005
Posts: 9
Poder: 0
RTorres Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 08-08-2005
<Sergio> <Sergio> is offline
Miembro
 
Registrado: sep 2004
Posts: 72
Poder: 20
<Sergio> Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:06:22.


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
Copyright 1996-2007 Club Delphi