Portable Network Graphics


PNG

It is an extensible file format for the lossless, portable, well-compressed storage of raster images. PNG provides a patent-replacement for GIF. Indexed-color, grayscale, and true color images are supported. PNG also supports an optional alpha channel. The two most common libraries to process PNGs are: libpng (requires the zlib library) and lodepng.
Es un formato para archivos para almacenar imágenes sin perdida, portable y comprimidas. PNG proporciona una opción para reemplazar a GIF. Se soportan los formatos: un índice para color, escala de grises e imágenes de color verdadero. PNG también suporta un canal opcional para transparencia. Las dos librerias mas comunes para procesar PNGs son: libpng (requirere la libreria zlib) y lodepng.

Problem 1
Download from the Internet the files: lodepng.h and lodepng.cpp. The creator of this library is Lode Vandenne. This library does not require any other libraries.
Descargue de la Internet los archivos: lodepng.h y lodepng.cpp. El creador de esta librería es Lode Vandenne. Esta librería no requiere ninguna otra librería.

Problem 2
Cree a Wintempla dialog applicaction called LodeTest. After creating the project, copy the files lodepng.h and lodepng.cpp in the proyect folder as shown.
Cree una aplicación de dialogo usando Wintempla llamada LodeTest. Después de crear el proyecto, copie los archivos lodepng.h y lodepng.cpp en la carpeta del proyecto como se muestra.

ProjectFolder

Step A
Open Solution Explorer, select the project and open the Context Menu using the right button of the mouse.Then, select Add > Existing item. Finally, select the files lodepng.h and lodepng.cpp.
Abra Solution Explorer, seleccione el proyecto y abra el menú de contexto usando el botón derecho del raton. Entonces, seleccione Add > Existing Item. Finalmente, seleccione los archivos lodepng.h y lodepng.cpp.

AddExisting

Step B
Edit the stdafx.h file by including the lodepng.h file as shown.
Edite el archivo stdafx.h incluyendo el archivo lodepng.h como se muestra.

stdafx.h
. . .
//
#include "lodepng.h"
#include "Wintempla.h"
#include "WintemplaWin.h"
using namespace std;
. . .


Step C
Edit the LodeTest.cpp file as shown.
Edite el archivo LodeTest.cpp como se muestra.

LodeTest.cpp
...
void LodeTest::Window_Open(Win::Event& e)
{
     wstring text;
     //________________________________________________ 1. Prompt the user for the filename
     Win::FileDlg dlg;
     dlg.SetFilter(L"PNG files (*.png)\0*.png\0\0", 0, L"png");
     if (dlg.BeginDialog(hWnd, L"Open", false) != TRUE) return;
     //________________________________________________ 2. Load the file data
     std::vector<unsigned char> filedata;
     if (Sys::FileAssistant::Load(dlg.GetFileNameFullPath(), filedata) == false)
     {
          this->MessageBox(L"Unable to load PNG file", L"LodeTest", MB_OK | MB_ICONERROR);
          return;
     }
     //________________________________________________ 3. Decode to obtain pixels
     std::vector<unsigned char> imagePixels;
     unsigned int width, height;
     unsigned int error = lodepng::decode(imagePixels, width, height, filedata);
     if (error != 0)
     {
          Sys::Convert::StringToWstring(lodepng_error_text(error), text);
          this->MessageBox(text, L"LodeTest", MB_OK | MB_ICONERROR);
          return;
     }
     //________________________________________________ 4. Display the image size
     Sys::Format(text, L"Width = %d\r\nHeight = %d", width, height);
     this->MessageBox(text, L"LodeTest", MB_OK | MB_ICONINFORMATION);
     //________________________________________________ 5. Display the first pixel RGBA
     Sys::Format(text, L"Red = %d\r\nGreen = %d\r\nBlue = %d\r\nAlpha = %d",
          (int)imagePixels[0], (int)imagePixels[1], (int)imagePixels[2], (int)imagePixels[3]);
     this->MessageBox(text, L"LodeTest", MB_OK | MB_ICONINFORMATION);
     //________________________________________________ 6. Display the second pixel RGBA
     Sys::Format(text, L"Red = %d\r\nGreen = %d\r\nBlue = %d\r\nAlpha = %d",
          (int)imagePixels[4], (int)imagePixels[5], (int)imagePixels[6], (int)imagePixels[7]);
     this->MessageBox(text, L"LodeTest", MB_OK | MB_ICONINFORMATION);
}


Step D
Compile and run the program. You will need a PNG image file to run the program.
Compile y ejecute el programa. Usted va a necesitar una imagen PNG para correr el programa.

LodeTestRun1

LodeTestRun2

LodeTestRun3

Problem 3
Cree a Wintempla Window application called WindowPng to display a PNG image. After creating the project, copy the files lodepng.h and lodepng.cpp in the proyect folder as shown. Be sure you create a Window application.
Cree una aplicación de Ventana usando Wintempla llamada WindowPng para mostrar una imagen PNG. Después de crear el proyecto, copie los archivos lodepng.h y lodepng.cpp en la carpeta del proyecto como se muestra. Asegúrese de crear una aplicación de Ventana.

WindowPngRun

WindowFolder

Step A
Open Solution Explorer, select the project and open the Context Menu using the right button of the mouse.Then, select Add > Existing item. Finally, select the files lodepng.h and lodepng.cpp.
Abra Solution Explorer, seleccione el proyecto y abra el menú de contexto usando el botón derecho del raton. Entonces, seleccione Add > Existing Item. Finalmente, seleccione los archivos lodepng.h y lodepng.cpp.

WindowAddExisting

Step B
Edit the stdafx.h file by including the lodepng.h file as shown.
Edite el archivo stdafx.h incluyendo el archivo lodepng.h como se muestra.

stdafx.h
. . .
//
#include "lodepng.h"
#include "Wintempla.h"
#include "WintemplaWin.h"
using namespace std;
. . .


Step C
Open Wintempla and click anywhere in the editor, select the Event tab and add the event Paint as shown.
Abra Wintempla y haga clic en cualquier parte en el editor, seleccione la pestaña de Event y agregue el evento Paint como se muestra.

PaintEvent

Step D
Edit the files WindowPng.h and WindowPng.cpp as shown.
Edite los archivos WindowPng.h y WindowPng.cpp como se muestra.

WindowPng.h
#pragma once //______________________________________ WindowPng.h
#include "Resource.h"
class WindowPng: public Win::Window
{
public:
     WindowPng()
     {
     }
     ~WindowPng()
     {
     }
     CG::DIBitmap bitmap;
     . . .
};


WindowPng.cpp
. . .
void WindowPng::Window_Open(Win::Event& e)
{
     wstring text;
     //________________________________________________ 1. Prompt the user for the filename
     Win::FileDlg dlg;
     dlg.SetFilter(L"PNG files (*.png)\0*.png\0\0", 0, L"png");
     if (dlg.BeginDialog(hWnd, L"Open", false) != TRUE) return;
     //________________________________________________ 2. Load the file data
     const wchar_t* error = bitmap.Load(dlg.GetFileNameFullPath());
     if (error != nullptr)
     {
          this->MessageBox(error, L"WindowPng", MB_OK | MB_ICONERROR);
          return;
     }
     this->Repaint(NULL, true);
}

void WindowPng::Window_Paint(Win::Event& e)
{
     CG::Gdi gdi(hWnd, true, false);
     gdi.DrawBitmap(bitmap, 0, 0);
}

© Copyright 2000-2021 Wintempla selo. All Rights Reserved. Jul 22 2021. Home