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 22-02-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Filtros graficos

Últimamente he puesto por aquí un poco de código sobre como aplicar filtros sobre una imagen: convertir a gris, cambiar tono, suavizar, detectar bordes, etc ... Así que he decidido hacer una recopilación y meterlo todo en una misma librería. Nada pretencioso, para esto ya hay unas librerías muy buenas que seguro que tienen muchos mas filtros, y sobre todo, funcionan mas rápido. Pero también es verdad que a veces no necesitamos demasiado y tener un pequeño código a mano puede ayudarnos.

La librería tiene la siguiente estructura. Para empezar se define el tipo "TImagen" con el que trabajan todos los filtros, y que nos permite que el resto del código sea independiente del formato gráfico con el que estemos trabajando, e incluso del sistema operativo, recordemos que el TBitmap utiliza bastantes funciones de la API de windows (1).

Cada filtro, es un objeto descendiente de la clase TFilto y todos tienen el mismo método "Aplicar". Esto lo hice así pensando la posibilidad de crear arrays de filtros y poderlos aplicarlos en serie sobre una misma imagen, pero eso lo dejaremos para mas adelante.

Un ejemplo básico de como aplicar un filtro seria el siguiente:
Código Delphi [-]
Imagen:= TImagen.Create;
try
  // Bitmap es un objeto de tipo TBitmap
  Imagen.LoadFromBitmap(Bitmap);
  with TFiltroSuavizar.Create do
  try
    Aplicar(Imagen);
  finally
    Free;
  end;
  Imagen.SaveToBitmap(Bitmap);
finally
  Imagen.Free;
end;

Un ejemplo un poco mas extenso, seria este otro:
Código Delphi [-]
var
  Imagen: TImagen;
  Bitmap: TBitmap;
begin
  Imagen:= TImagen.Create;
  with Imagen do
  try
    Bitmap:= TBitmap.Create;
    try
      Bitmap.LoadFromFile('C:\Dibujo.bmp'); 
      // Por ahora solo admite imagenes de 24 bits   
      Bitmap.PixelFormat:= pf24bit;
      LoadFromBitmap(Bitmap);
      // Primero suavizamos la imagen
      with TFiltroSuavizar.Create do
      try
        Aplicar(Imagen);
      finally
        Free;
      end;
      // Y luego detectamos los bordes de la imagen
      with TFiltroSobel.Create(16) do
      try
        Aplicar(Imagen);
      finally
        Free;
      end;
      SaveToBitmap(Bitmap);
      Bitmap.SaveToFile('C:\Dibujo2.bmp');
    finally
      Bitmap.Free;
    end;
  finally
    Imagen.Free;
  end;
end;

Bueno, aquí os dejo la unit. Recordar que es un primer esbozo, y si alguien se anima a crear algún filtro nuevo, o algún otro cambio en la estructura de la unit, que lo diga.




(1) He estado haciendo algunas pruebas con freepascal en linux y debo ser un poco torpe, pero no he podido encontrar el objeto TBitmap o algún equivalente. Creo que en las librerías que instala lazarus se puede encontrar, pero me preguntaba si no se podría encontrar algo parecido en las librerías que trae freepascal por defecto.
Archivos Adjuntos
Tipo de Archivo: zip Filtros.zip (2,5 KB, 59 visitas)
Responder Con Cita
  #2  
Antiguo 22-02-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
yo tambien voy a intentar ayudar...

seoane... ¡estamos con ganas de poner código!

Si lo hiciste pensando en que leerias este mensaje. Pues, aqui me ves... como dulce a un niño. Admiro la dedicación que le pones a esto... eres un ejemplo a imitar (junto a otros miembros que están habitan en estos foros).

Yo le voy a dar una miradita... de seguro que algunos de los filtros que expones, lo debo haber visto Y en cada tiempito que tenga libre y si veo que conozco de algun otro... y/o funciones sobre tratamiento de imagen. Voy a ir colaborando en esta unidad.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 09-06-2010
FENIXadr FENIXadr is offline
Miembro
 
Registrado: may 2010
Ubicación: Córdoba - Cba. - Argentina
Posts: 104
Poder: 15
FENIXadr Va por buen camino
Filtros Graficos

Hola Seoane... estoy necesitando hacer unas sombras destras de unas imágenes y buscando algo de filtros para suavisar me encontré con esta librería que has hecho hace un tiempito ya.. de más esta decir que te felicito porque, si bien no son muchos filtros, se ve el esmero que has puesto y los grandes conocimientos que tienes.. bueno pero volviendo al tema.. lo que estoy haciendo es lo siguiente.. vos me decís si voy por buen camino o no.. en un BitMap, tengo una imagen en donde el color verde (R=0, G=255, B=0) es tomado como transparente.. por otro lado creo otro BitMap con una máscara que genero a partir del ScanLine con el que saque la parte transparente, de esta manera tengo un BitMap con la imagen y otro BitMap en donde todo lo verde es blanco y todo lo diferente a lo verde es negro, luego aplico un filtro para suavisar la mascara y ahi tengo la sombra, (obviamente que despues la mezclo con las distintas tonalidades de negro para que sea semitransparente) mi problema es este... sabes de un filtro que mas que un suavisado te haga un "borroneado" de una imagen?? necesito que la sombra conserve algo de su forma pero se difunda y se desparrame bastante.. Aplicar varias veces el suavisado no es la solución que estoy buscando... desde ya muchas gracias...
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Filtros y + filtros leodelca23 Tablas planas 7 19-09-2006 03:45:17
Filtros..bla, bla... gandalf_27 Conexión con bases de datos 2 15-06-2006 02:11:24
Filtros dmagui Firebird e Interbase 1 31-05-2005 23:15:10
uso de filtros. inexperto Conexión con bases de datos 8 23-01-2005 09:48:54
Filtros gerly Conexión con bases de datos 4 08-09-2003 19:01:34


La franja horaria es GMT +2. Ahora son las 12:36:14.


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