site stats


PNGwriter logo



Última actualización: 31 de agosto, 2015

[english version]
[日 本語の ページ]

PNGwriter es una librería de C++ para crear imágenes PNG.


(Si no puedes ver el menú de navegación a la izquierda, entonces haz click aquí).


Últimas Noticias:
Nueva versión y un nuevo integrante  — agosto 2015

Ha pasado bastante tiempo desde la última versión de PNGwriter. Gracias a la ayuda generosa de Axel Hübl (@ax3l) se han eliminado muchos bugs, hay un nuevo método de compilación, y PNGwriter ya está en GitHub. Axel es ahora un miembro activo y valioso del equipo PNGwriter, uniéndose a Paul Blackburn, quien creó PNGwriter en 2002. Bienvenido a bordo, Axel!

Este incentivo para tomar acción no podría haber venido en mejor momento, dado que el sitio donde antes estaba hosteado el proyecto PNGwriter, SourceForge.net, ya no es lo que nosotros consideramos un aporte positivo a la comunidad Open Source. Este website y los archivos que se encuentran presentemente hosteados en SourceForge.net se quedarán ahí, pero después de ésta versión, sólo se publicarán las nuevas versiones en el repository de PNGwriter en repository de PNGwriter en GitHub. No te olvides!

Lamentablemente la versión 0.5.4 es la última que cuenta con documentación y páginas web actualizadas en español. La página web en español de PNGwriter (lo que estás leyendo) no se actualizará a futuro. La página en inglés se mantendrá actualizada, y PNGwriter siempre tendrá documentación actualizada en inglés.

Les doy las gracias a ustedes, usuarios de PNGwriter, por su paciencia, bug fixes, y sugerencias. Espero que tengan el mismo entusiasmo que tenemos por ver qué traerán los próximos trece años de PNGwriter!

Paul Blackburn
San José, California  Flag of California
 31 de agosto, 2015



Resumen

PNGwriter es una librería gráfica que usa el formato PNG. La interface ha sido diseñada para ser lo más simple e intuitiva posible. Permite:
  • Plotear y leer en los espacios de colores:
    • RGB (rojo, verde, azul),
    • HSV (hue, saturation, value/brightness),
    • CMYK (cyan, magenta, amarillo, negro);
  • Figuras básicas;
  • Cambio de escala de imágenes;
  • Interpolación bilineal,
  • Soporte completo para texto TrueType rotado y con antialiasing;
  • Curvas bezier;
  • Abrir imágenes PNG ya existentes;
  • Y más!
También:
  • Documentación en inglés y español. Funciona en Linux, Unix, Mac OS X y Windows. Requiere libpng y opcionalmente FreeType2 para el soporte de texto.

La presencia online de PNGwriter consiste de:


Preguntas frecuentes:















Si tus preguntas no son respondidas, haz la pregunta en el foro PNGwriter Forum, o anda a Contactos y mandame un email.





Porqué usar la librería PNGwriter?

Porque es una manera rápida y fácil de plotear directamente desde tu programa de C++.

PNGwriter permite que te enfoques en tu programa, y evita que pierdas tiempo en aprender cómo manejar y crear imágenes PNG. Sólo necesitas especificar el tamaño de tu imagen, y luego vas ploteando pixel por pixel en un color dado, usando la función plot.


PNGwriter fue escrito originalmente teniendo en mente a los científicos. La necesidad de crear imágenes desde un programa surge generalmente como parte natural del uso científico de la programación. Sacar los datos desde el programa a una imagen de alta calidad de manera eficiente puede a veces ser difícil, especialmente si el usuario no es un programador muy experimentado. Los métodos estándares pueden ser altamente ineficientes o demasiado complejos como para ser empleados por un principante en tiempo limitado.

PNGwriter fue escrito justamente para ofrecer una alternativa. Su interface es extremadamente intuitiva, hay sólo un objeto nuevo para aprender (la clase PNGwriter), en otras palabras, no hay clases y subclases para pixeles, colores, bitmaps, nombres de archivo, etc. Con tal de que sepas de qué color quieres el pixel en la posición (x, y), puedes implementar cualquier algoritmo que quieras. Quieres jugar con autómatas celulares pero estás cansado de ver los resultados como un arreglo de texto de 1s y 0s? Quieres explorar fractales tú mismo? Necesitas una manera rápida de implementar ese algoritmo de reconocimiento de imágenes en el cual estás trabajado PNGwriter te puede ayudar!



Qué puedo hacer con PNGwriter?

PNGwriter permite hacer lo siguiente con una imagen:
  •       Plotear
  •       Averiguar el color de un pixel
  •       Leer un PNG ya existente para trabajar con él.
  •       Plotear en el espacio de colores HSV y CMYK.
  •       Averiguar el color de un pixel en el espacio de colores HSV y CMYK.
  •       Plotear lineas, circulos, rectangulos, huecos o llenos, opacos o trasl&uacte;cidos.
  •       Plotear texto con cualquier fuente TrueType.
  •       Ajustar el gamma de la imagen.
  •       Elegir el nivel de compresion.
  •       Cambiar el nombre del archivo.
  •       Re-escalar la imagen.
  •       Averiguar el alto, ancho y bit depth de una imagen.
  •       y mucho más!.


Al poder generar una cantidad arbitraria de imágenes PNG con cada corrida de tu programa, y dado que PNGwriter provee un método fácil de nombrar los archivos especificando sólo un número de índice, es posible crear videos de imágenes secuenciales. Para esto, uno podría usar FFmpeg, MEncoder o Quicktime Player de Apple.



Qué *no* puedo hacer con PNGwriter?

Hay ciertas cosas que PNGwriter no puede hacer. Por ejemplo, aunque PNGwriter (a partir de la versión 0.5.5) puede abrir una gran variedad de imágenes PNG, hay algunas variantes con las que tiene problemas. En resumen:

  • La información de transparencia del alpha channel se descarta por completo al momento de abrir un PNG.
  • Las imágenes con transparencia al estilo GIF no son leídas correctamente.
  • Algunas imágenes serán leídas con una calidad cromática levemente distinta.

A pesar de estas limitaciones, PNGwriter probablemente abrirá la gran mayoría de imágenes que quieras abrir. Por favor ve, en la sección Ejemplos, una lista detallada de imágenes de prueba y cómo PNGwriter lidia con ellas.



Porqué usar imágenes de tipo PNG?

Porque son ampliamente conocidas e incorporan compresión sin pérdidas.

Comparten ciertas características con las imágenes GIF, pero a diferencia de éstas, no están atadas por el copyright de la compresión LZW de los GIF.

El formato PNG es abierto, libre y bueno.

Ofrecen la posibilidad también de usar Alpha Channels (mejor que la simple transparencia, pero por favor nota que PNGwriter no soporta alpha channels) y un montón de otras cosas interesantes y útiles.

Ni siquiera tienes que convertirlos si quieres mostrar tus resultados en tu página web: PNG significa Portable Network Graphics-- fueron diseñados para internet y cualquier browser decente los puede mostrar. De hecho, la mayoría de los gráficos en este sitio son PNG :-)

Para mas información recomiendo visitar www.libpng.org.



A quién está dirigida esta librería de C++?

En el 2002 creé PPMWriter porque quería algo que me permitiese plotear pixel por pixel una imagen, dando sólo las coordenadas y los coeficientes de color de éste. Escogí el formato PPM porque era simple de implementar y porque encontré que las librerías tradicionales para crear imágenes eran demasiado complejas para mi nivel de conocimiento. A la larga el format PPM resultó tener demasiadas deficiencias.

En principio le podría ser útil a cualquiera que necesite plotear imágenes de alta calidad generada por programas de C++ (simulaciones, cálculos, etc.) y no diagramas.


Qué necesito para usar la librería PNGwriter?

Un compilador de C++, y libpng. libpng funciona en Unix, DOS, OS/2, Windows, Mac OS, BeOS, Amiga, etc. Si tu compilador es viejo, mi recomendación personal es GCC. Mira www.cplusplus.com/info/compilers/#free para obtener información acerca de compiladores libres. Si quieres compilar PNGwriter con soporte de texto, necesitarás FreeType 2. Si está en Windows, mira la sección "Cómo puedo usar PNGwriter en Windows?".



PNGwriter puede dibujar texto y ejes de gráficos?

Sí, PNGwriter ahora tiene soporte completo de texto (incluyendo soporte para codificación UTF-8), pero no crea ejes. Ésta es la razón oficial: PNGwriter está orientado a la generación rápida e intuitiva de imágenes de alta calidad resultando de simulaciones científicas o del procesamiento de imágenes. Cualquier imagen bitmap que requiera ejes y que debe ser publicado en calidad de publicación debería usar gráficos vectoriales para los ejes (y quizás el texto), no bitmap, y combinar ambos en un EPS.

Así que todo está perdido? No hay nada que se pueda hacer? Claro que si! Aquí hay una solución: Crea imágenes PNG de los ejes de gráfico que quieres agregar a tu imagen, usando el método de tu elección (The Gimp, Photoshop, etc.). Hazlos negro sobre blanco, por ejemplo. Desde tu programa, abre este archivo con PNGwriter. Escribe una rutina simple que tome todos los pixeles negros, y los plotee en tu imagen, en la posicion que tu especificas, y en el color que quieras. Esto puede ser automatizado, de manera que se hace al terminar cada imagen que creas.



Suena interesante, cómo se usa?

Si quieres ver el ejemplo más simple posible del uso de PNGwriter, anda a Quickstart. Es lo mínimo que necesitas para usar PNGwriter (y, en realidad, lo único que necesitas saber, en la gran mayoría de los casos).

Si quieres ver más ejemplos de PNGwriter en uso, anda a Ejemplos.

Si quieres mirar el manual de PNGwriter, anda a la sección Manual. El paquete de PNGwriter, disponible en la sección Downloads contiene dos ejemplos completos y un manual PDF. El archivo header de la librería está extensamente comentado.
Si quieres hacer una pregunta, hazla en el PNGwriter Issue Tracker en GitHub.



Cómo usar PNGwriter en Windows?

Nota: Si bien en este sitio existen guías para compilar PNGwriter con algunos compiladores populares de Windows, no puedo ofrecer ni soporte ni ayuda con esta tarea.
Deberís obtener una implementación en Windows de GCC, el compilador C/C++ libre de la GNU (dos maneras posibles de hacer esto son www.mingw.org y www.cygwin.com). También puedes usar Borland C++ Builder o Microsoft Visual C++ .NET en Windows XP. Aquí hay dos explicaciones simples y paso a paso (en inglés, por ahora): "Setting Up PNGWriter for Borland C++ Builder Version 6 on Windows XP" y "Setting Up PNGWriter for Microsoft Visual C++ .NET on Windows XP".
Además, usar PNGwriter con Bloodshed Dev C++ es bastante fácil, como comenta Siva Chandra: "Puedes bajar las librerías pre-compiladas de freetype del website de GnuWin32: gnuwin32.sf.net. Para compilar a PNGwriter, crea un nuevo proyecto de librería de C++ llamado libpngwriter. Incluye el archivo header de PNGwriter y el archivo de implementación en este nuevo proyecto. Compila. Eso es todo! Ahora tendrás tu archivo libpngwriter.a listo para ser usado. Nota que esto asumirá por defecto la disponibilidad de freetype. Para remover ese supuesto, deberas compilar con esta opción: -DNO_FREETYPE".
Nota: Debes cambiar el nombre de pngwriter.cc a pngwiter.cpp para compilarlo con MSVC7. Si la extension no se cambia, entonces la propiedad del directorio de C/C++ para el proyecto no se será visible. En este caso el valor por defecto de MSVC7 de usar headers precompilados en su build del proyecto siempre tirará un error diciendo que no puede encontrar un cierto header precompilado. Es necesario entonces cambiar esa característica en las propiedades del proyecto para compilar la librería PNGwriter exitosamente.
El usuario Giancarlos Colasante gentilmente ha enviado un procedimiento que creó con ayuda de Siva Chandra: "Como correr PNGwriter bajo Windows con Dev-C++":
  1. Descarga Zlib , LibPng y FreeType. Instálalos. Hay 2 formas: zip y setup (remomendada).
  2. Descarga pngwriter. Descomprímelo en cualquier carpeta.
  3. En el menú de Dev-C++ "Tools > Compiler Options > Directories(pestaña) " agrega desde ...\GnuWin32\ las carpetas bin, lib, include y include\freetype2\freetype en las pestañas Binaries, Libraries y C++ includes respectivamente.
  4. En Dev-C++ crea un Proyecto tipo Static Library y llámalo libpngwriter. Guárdalo en ...\pngwriter-0.5.3\src\. En el menú "Project > Add to Project" coloca pngwriter.cc que está en la misma carpeta. En el menú "Execute > Compile" y listo. Debes tener libpngwriter.a en esa carpeta, muévelo a ...\Dev-Cpp\lib\ y  pngwriter.h a ...\Dev-Cpp\include\
  5. Desde ...\GnuWin32\bin\ copia los .dll (freetype6, libpng13 y zlib1) a ...Windows\system32\
  6. Prueba que todo salió bien corriendo el ejemplo Quickstart. En Dev-C++ crea un Proyecto, pega el cóigo del ejemplo. En el menú "Project > Project Options > Parameters(pestaña) > Linker (casilla)" agrega: -lpngwriter, -lfreetype, -lpng. Compílalo y listo.



Qué hay en el paquete PNGwriter?

El tarball/zip de PNGwriter contiene lo siguiente:


pngwriter-release-x.y.z
 |-- CHANGELOG.md
 |-- CMakeLists.txt
 |-- Makefile
 |-- README.md
 |-- doc
 |   |-- CHANGES
 |   |-- EXAMPLES
 |   |-- LICENSE
 |   |-- PNGwriterQuickReference.pdf
 |   |-- PNGwriterQuickReference.rtf
 |   `-- README
 |-- examples
 |   |-- Makefile
 |   |-- burro.png
 |   |-- lyapunov.cc
 |   `-- pngtest.cc
 |-- fonts
 |   |-- FreeMonoBold.ttf
 |   `-- FreeSansBold.ttf
 |-- make.include -> make.include.linux
 |-- make.include.linux
 |-- make.include.osx
 |-- src
 |   |-- Makefile
 |   |-- pngwriter.cc
 |   `-- pngwriter.h
 `-- tests
     |-- blackwhite.cc
     |-- diamond.cc
     `-- performance.cc




Cómo puedo linkear a el proyecto PNGwriter desde mi página?

Encontraste útil a PNGwriter? Si es así entonces corre la voz, y cuéntale a los demás, poniendo el siguiente botón en tu página. Quien sabe, podrí ser exactamente lo que alguien estábuscando.


Made With PNGwriter


Si quieres, puedes linkear directamente a la imagen del sitio de PNGwriter. En tal caso, agrega el siguiente código a tu página:

<a href="http://pngwriter.sourceforge.net/"><img src="http://pngwriter.sourceforge.net/site_images/madewith.png" width="88" height="31" alt="Made With PNGwriter" BORDER="0" target="_blank"> </a >



Cuál es el estado presente del desarrollo de PNGwriter?

A contar de la versión 0.5.5 (agosto 2015), PNGwriter se encuentra otra vez en desarrollo activo. Revisa la página de PNGwriter en GitHub para mantenerte al tanto de actualizaciones.





SourceForge.net Logo Valid HTML 4.01! Valid CSS!


© 2002-2015 Paul Blackburn

eXTReMe Tracker