comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Redimensionar una imagen (Antialiasing)

  • 0 Respuestas
  • 1645 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5391
  • Actividad:
    38.33%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Febrero 24, 2010, 04:58:07 pm »
Código: Delphi
  1. type
  2. TRGBTripleArray = array[0..32767] of TRGBTriple;
  3. PRGBTripleArray = ^TRGBTripleArray;
  4. ...
  5. // Esta cambia el alto y ancho, estirando la imagen si es necesario; Al procedimiento original de Redimensionar (Seoane) se la ha añadido un procedimiento sencillo de antialiasing.
  6. procedure Redimensionar(Imagen:TBitmap; Ancho, Alto: Integer);
  7. var
  8. Bitmap: TBitmap;
  9. //····························································
  10. // Procedimiento de Antialiasing con Distancia=1
  11. procedure Antialiasing(bmp1, bmp2:TBitmap);
  12. var
  13. r1,g1,b1:Integer;
  14. Y, X, j:integer;
  15. SL1, SL2, SL3: PRGBTripleArray;
  16. begin
  17.  
  18. // Tamaño del bitmap destino
  19. bmp2.Height := bmp1.Height;
  20. bmp2.Width := bmp1.Width;
  21. // SCANLINE
  22. SL1 := bmp1.ScanLine[0];
  23. SL2 := bmp1.ScanLine[1];
  24. SL3 := bmp1.ScanLine[2];
  25.  
  26. // reorrido para todos los pixels
  27. for Y := 1 to (bmp1.Height - 2) do begin
  28. for X := 1 to (bmp1.Width - 2) do begin
  29. R1 := 0; G1 := 0; B1 := 0;
  30. // los 9 pixels a tener en cuenta
  31. for j := -1 to 1 do begin
  32. // FIla anterior
  33. R1 := R1 + SL1[X+j].rgbtRed + SL2[X+j].rgbtRed + SL3[X+j].rgbtRed;
  34. G1 := G1 + SL1[X+j].rgbtGreen + SL2[X+j].rgbtGreen + SL3[X+j].rgbtGreen;
  35. B1 := B1 + SL1[X+j].rgbtBlue + SL2[X+j].rgbtBlue + SL3[X+j].rgbtBlue;
  36. end;
  37. // Nuevo color
  38. R1:=Round(R1 div 9);
  39. G1:=Round(G1 div 9);
  40. B1:=Round(B1 div 9);
  41. // Asignar el nuevo
  42. bmp2.Canvas.Pixels[X, Y] := RGB(R1,G1,B1);
  43. end;
  44. // Siguientes...
  45. SL1 := SL2;
  46. SL2 := SL3;
  47. SL3 := bmp1.ScanLine[Y+1];
  48. end;
  49. end;
  50. //····························································
  51. begin
  52.  
  53. Bitmap:= TBitmap.Create;
  54.  
  55. // Aplicamos antialiasing
  56. Antialiasing(Imagen, Bitmap);
  57. Imagen.Assign(Bitmap);
  58.  
  59. // reducir
  60. try
  61. Bitmap.Width:= Ancho;
  62. Bitmap.Height:= Alto;
  63. Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect, Imagen);
  64. Imagen.Assign(Bitmap);
  65. finally
  66. Bitmap.Free;
  67. end;
  68. end;



« Última modificación: Abril 15, 2013, 11:25:27 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!