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 30-09-2010
ses27coves ses27coves is offline
Miembro
 
Registrado: may 2010
Posts: 16
Poder: 0
ses27coves Va por buen camino
Funcion para AntiAliasing

Hola, tengo un procedimiento para evitar el aliasing de las imagenes, pero solo me funciona al cargar imagenes bmp y resulta que lo necesito solo para imagenes jpg. He intentado adaptarlo pero no se como hacerlo. Me da un error de 'scan line index out of rande' en la linea SL1 := bmp1.ScanLine[0];

Alguien puede orientarme sobre como hacerlo.

Gracias
Código Delphi [-]
procedure TForm1.Image2Click(Sender: TObject);
begin
 Antialiasing(image1.Picture.Bitmap, Image2.Picture.Bitmap);
end;

function TForm1._NewColor3(X, Y: integer; SL1, SL2,
  SL3: PRGBTripleArray): TColor;
var
  r1,g1,b1:Integer;
  r2, g2,b2:Integer;
  r3, g3,b3:Integer;
  r4, g4,b4:Integer;
  r5, g5,b5:Integer;
  r6, g6,b6:Integer;
  r7, g7,b7:Integer;
  r8, g8,b8:Integer;
  r9, g9,b9:Integer;
  i:Integer;
begin
  Result := RGB(R1,G1,B1);
end;

procedure TForm1.Antialiasing(bmp1, bmp2:TBitmap);
  var
    r1,g1,b1:Integer;
    Y, X, j:integer;
    SL1, SL2, SL3: PRGBTripleArray;
  begin

    // Tamaño del bitmap destino
    bmp2.Height := bmp1.Height;
    bmp2.Width := bmp1.Width;
    // SCANLINE
    SL1 := bmp1.ScanLine[0];
    SL2 := bmp1.ScanLine[1];
    SL3 := bmp1.ScanLine[2];

    // reorrido para todos los pixels
    for Y := 1 to (bmp1.Height - 2) do begin
      for X := 1 to (bmp1.Width - 2) do begin
        R1 := 0;  G1 := 0; B1 := 0;
        // los 9 pixels a tener en cuenta
        for j := -1 to 1 do begin
          // FIla anterior
          R1 := R1 + SL1[X+j].rgbtRed    + SL2[X+j].rgbtRed    + SL3[X+j].rgbtRed;
          G1 := G1 + SL1[X+j].rgbtGreen  + SL2[X+j].rgbtGreen  + SL3[X+j].rgbtGreen;
          B1 := B1 + SL1[X+j].rgbtBlue   + SL2[X+j].rgbtBlue   + SL3[X+j].rgbtBlue;
        end;
        // Nuevo color
        R1:=Round(R1 div 9);
        G1:=Round(G1 div 9);
        B1:=Round(B1 div 9);
        // Asignar el nuevo
        bmp2.Canvas.Pixels[X, Y] := RGB(R1,G1,B1);
      end;
      // Siguientes...
      SL1 := SL2;
      SL2 := SL3;
      SL3 := bmp1.ScanLine[Y+1];
    end;
  end;
Responder Con Cita
  #2  
Antiguo 01-10-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Eso se debe a que un TImage.Picture sólo tiene un TBitmap si contiene una imagen BMP (es decir, un bitmap).

Cuando la imagen es de otro tipo, el objeto bitmap no tiene nada adentro.


Lo que podrías hacer, antes de llamar a la rutina en cuestión, es convertir a bitmap. Lógicamente dejás de tener un jpg para pasar a tener un bitmap.

Código Delphi [-]
procedure TForm1.Image2Click(Sender: TObject);
var Bmp: TBitmap;
begin
  Bmp:= TBitmap.Create;
  Bmp.Assign(image1.Picture.Graphic);
  Antialiasing(Bmp, Image2.Picture.Bitmap);
  Bmp.Free;
end;

¿Se entiende?

Saludongos.
Responder Con Cita
  #3  
Antiguo 01-10-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ses27coves Ver Mensaje
tengo un procedimiento para evitar el aliasing de las imagenes, pero solo me funciona al cargar imagenes bmp
Me suena ese procedimiento...

Si te es posible, promero podrías hacer la conversión a BMP (al mismo tamaño del original) y luego aplicar el algoritmo de antialiasing. Una vez acabado puedes hacer la conversión al revés.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 01-10-2010
ses27coves ses27coves is offline
Miembro
 
Registrado: may 2010
Posts: 16
Poder: 0
ses27coves Va por buen camino
muchas gracias. Es una buena idea lo de pasar a bmp antes de aplicar antialiasing. Y ademas funciona.

Sobre el procedimiento de antialiasing aclarar que no es mio yo lo estraje de neftali.clubdelphi.com/?p=296 .Que por el nombre de la url me imagino que es de Neftali.

Pido disculpas por no haberlo mencionado, no era mi intención apoderarme del procedimiento. Ademas debo agradecer que la gente sea tan amable publicando y ayudando a gente como yo, ya que haveces me quedo encallado y no se como realizar algunas cosas, y gracias a lo que esta publicado en internet puedo proseguir y ademas aprender.
Responder Con Cita
  #5  
Antiguo 01-10-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Me suena ese procedimiento...
Cita:
Empezado por ses27coves Ver Mensaje
Sobre el procedimiento de antialiasing aclarar que no es mio yo lo estraje de neftali.clubdelphi.com/?p=296 .Que por el nombre de la url me imagino que es de Neftali.
Creo que sí.

Cita:
Empezado por ses27coves Ver Mensaje
Pido disculpas por no haberlo mencionado, no era mi intención apoderarme del procedimiento.
No tienes que pedir disculpas en absoluto. No era esa la intención de mi comentario. En ningun momento habías dicho que era tuyo, sino que intentabas adaptarlo, por lo que se deducía que no era tuyo.

Un saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Función '&' de VB para delphi (?) wofox Varios 3 10-12-2007 04:52:15
Función para strings Jesús Pena Varios 4 26-04-2007 01:48:33
Existe una funcion para...? famcd PHP 6 07-02-2006 12:18:07
Funcion para apagar el Pc en Xp Jan_polero API de Windows 1 28-10-2004 14:33:08
Funcion para validar IP Mauricio Correa Internet 7 01-10-2003 15:04:25


La franja horaria es GMT +2. Ahora son las 07:26:24.


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