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

 
 
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
 



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 00:49:58.


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