Cambiando la Escala de una Imagen con PNGwriter


PNGwriter te permite re-escalar una imagen de diferentes maneras, de acuerdo a tus necesidades. El algoritmo usado es una simple interpolación bilineal, el cual da buenos resultados.

Para re-escalar la imagen, puedes usar cualquiera de los siguientes:

  • scale_k(double k): Re-escala la imagen proporcionalmente usando un factor único de escala.
  • scale_kxky(double kx, double ky): Re-escala la imagen no-proporcionalmente usando factores de escala verticales y horizontales.
  • scale_wh(double w, double h): Re-escala la imagen no-proporcionalmente usando el ancho y altura requeridos.


Aquí hay algunas imágenes re-escaladas. La original es la imagen burro.png image incluida en la distribución de PNGwriter. Las im´genes han sido convertidas a JPG para reducir el ancho de banda usado.

Una imagen re-escalada proporcionalmente con k = 0.25
Scaled image.
Una imagen re-escalada proporcionalmente con k = 0.5
Scaled image.
Una imagen re-escalada no-proporcionalmente kx = 2.0, ky = 0.5
Scaled image.


Aquí podemos comparar dos imágenes. Una de ellas es la imagen original, chica. La otra es 5 veces más grande. nota que aunque la imagen re-escalada es suave, se pueden distinguir los pixeles originales hasta cierto punto. En caso de que te estés preguntando qué es esa cosa en la foto, soy yo, en un saco de dormir, asomando sólo mis labios. Lo que estaba tratando de imitar, no te diré! :-) (San Pedro de Atacama, Chile, circa Enero 99).

Imagen original.
Original image.
Imagen re-escalada (k = 5.0)
Scaled image.


Este es un programa ejemplo:

#include <pngwriter.h>


int main(int argc, char * argv[])
{
   pngwriter image1(1,1,0,"scaled_k.png");
   pngwriter image2(1,1,0,"scaled_kxky.png");
   pngwriter image3(1,1,0,"scaled_wh.png");
   
   image1.readfromfile(argv[1]);
   image2.readfromfile(argv[1]);
   image3.readfromfile(argv[1]);

   std::cout << "Read file is:" << image1.getheight() << " " << image1.getwidth() << "\n";   
   std::cout << "Done read\n";   
   
   image1.scale_k(0.7);
   std::cout << "New file is:" << image1.getheight() << " " << image1.getwidth() << "\n";   
   std::cout << image1.read(100,100,1) << std::endl;
   image1.close();
   
   std::cout << "Done1\n";   
   
   image2.scale_kxky(0.7, 0.3);
   image2.close();
   
   std::cout << "Done2\n";   
   
   image3.scale_wh(400,100);
   image3.close();
   
   std::cout << "Done3\n";   
   
   
   
   
   
   return 0;   
}



syntax highlighted by Code2HTML, v. 0.9.1

Valid CSS!


© 2002, 2003, 2004, 2005, 2006, 2007 Paul Blackburn