A JPG or PNG Image


Tip
To display a JPG or PNG image in a program, you can insert an Image control in the GUI using Wintempla. It is necessary to specify the filename of the image in the program. The full path of the image can be used or the file can be placed in the program folder. If the image file is placed in the program folder, it is not necessary to specify the full path, for instance, if the program is located in C:\Documents\, then the image file must be located in C:\Documents\Program\Programa\imagen.jpg.
Para mostrar una imagen del tipo JPG o PNG en un programa, se puede insertar el control de Image en la GUI usando Wintempla. En el programa es necesario especificar el nombre del archivo de la imagen. Se puede proporcionar la ruta completa del archivo o bien se coloca el archivo de imagen en la misma carpeta del programa. Si el archivo de la imagen es ubicado en la carpeta del programa, no es necesario especificar la ruta completa, por ejemplo, si el programa está ubicado en C:\Documents\, entonces el archivo de la imagen se debe colocar en C:\Documents\Program\Programa\imagen.jpg.

Problem 1
Create a program called ImageView to display a JPG (or PNG) image. The program will show two different methods to display the image. Insert an Image control and select the Paint event as shown. Insert also a button to show how to export the JPG image to PNG.
Cree un programa llamado ImageView para mostrar una imagen JPG (o PNG). El programa mostrará dos métodos diferentes para mostrar la imagen. Inserte un Image control y seleccione el evento Paint como se muestra. Inserte un botón también para mostrar cómo se puede exporta una imagen JGP a PNG.

ImaveViewGui

ImageViewPaintEvent

ImageViewRun

ImageView.cpp
...
void ImageView::Window_Open(Win::Event& e)
{
     //________________________________________________________ imgMain
     imgMain.FileName = L"C:\\Users\\Jhon\\Picture.jpg";
}

void ImageView::btConvertPng_Click(Win::Event& e)
{
     Win::FileDlg dlg;
     dlg.Clear();
     dlg.SetFilter(L"PNG image files (*.png)\0*.png\0\0", 0, L"png");
     if (dlg.BeginDialog(hWnd, L"Save", true) == TRUE)
     {
          Sys::Convert::Image(imgMain.FileName.c_str(), dlg.GetFileNameFullPath(), 0);
     }
}

void ImageView::Window_Paint(Win::Event& e)
{
     // THE LAST PARAMETER must be "true" to turn on GDI+
     CG::Gdi gdi(hWnd, true, true);
     Gdiplus::Image image(L"C:\\Users\\Jhon\\Picture.jpg");
     gdi.Plus.DrawImage(&image, 0, 0);
}


Independent JPEG Group

This group writes and distributes a widely used free library for JPEG image compression, https://www.ijg.org/. There is a Windows format package in zip archive format. After uncompressing the zip file, you will need to rename two Makefiles to Microsoft Visual Studio Solution Files (*.sln). Similarly, you will need to rename five Makefiles to Microsoft Visual Studio Project Files (*.vcxproj). One solution produces jpeg.lib, the other solution produces cjpeg.exe, djpeg.exe and other three more files.
This group writes and distributes a widely used free library for JPEG image compression, https://www.ijg.org/. Hay un paquete para Windows en un archivo zip. Después de descomprimir el archivo zip, usted necesitará cambiar de nombre a dos Makefiles a archivos de soluciones de Microsoft Visual Studio (*.sln). De forma similar, usted necesitará cambiar de nombre cinco Makefiles a archivos de proyectos de Microsoft Visual Studio (*.vcxproj). Una de las soluciones produce jpeg.lib. La otra solución produce cjpeg.exe, djpeg.exe y otros tres más archivos.

cjpeg.exe

cjpeg.exe is used to compress bmp or gif files to jpg files.

cjpeg.exe -quality 95 picture.bmp picture.jpg
cjpeg.exe es usado para comprimir archivos bmp o gif a archivos jpg.

djpeg.exe

djpeg.exe is used to decompress jpg files to bmp or gif.

djpeg.exe -gif picture.jpg picture.gif
djpeg.exe es usado para descomprimir archivos jpg a bmp o gif.

Problem 2
Go to https://www.ijg.org/ and download jpegsr9c.zip. After downloading the zip file, uncompressed the file.
Abra https://www.ijg.org/ y descargue jpegsr9c.zip. Después de descarga el archivo zip, descomprima el file.

Problem 3
Locate the two Makefile files that are Microsoft Visual Studio solutions (*.sln) or projects (*.vcxproj). Rename the solution file that generates jpeg.lib to jpeg.sln. Rename the solution file that generates cjpeg.exe and djpeg.exe to jpeg_tools.sln. Finally, rename the Microsoft Visual Studio project file that generates jpeg.lib to jpeg.vcxproj.
Ubique los archivos de Makefile que son soluciones (*.sln) o proyectos (*.vcxproj) de Microsoft Visual Studio. Cambie el nombre del archivo de la solución que genera jpeg.lib a jpeg.sln. Cambie de nombre el archivo de la solución que genera cjpeg.exe y djpeg.exe a jpeg_tools.sln. Finalmente, cambie el nombre del archivo del proyecto de Microsoft Visual Studio que genera jpeg.lib a jpeg.vcxproj.

JpegFolder

Problem 4
Open the jpeg.sln solution and compile the Release version in 64 bits to generate jpeg.lib. You may need to use your Computer Science skills to get to compile the library.
Abra la solución jpeg.sln y compile la versión Release en 64 bits para generar jpeg.lib. Usted necesitará usar sus habilidades de Ciencias de la Computación para conseguir la compilación de la librería.

JpegLib

Problem 5
Create a Wintempla Window Application called ExpertsGroup to display a JPG using jpeg.lib. After creating the project check the Paint event (Window_Paint).
Cree una aplicación de Ventana de Wintempla llamada ExpertsGroup para mostrar una JPG usando jpeg.lib. Después de crear el proyecto marque el evento de Paint (Window_Paint).

ExpertsGroupRun

Step A
Open the ExpertsGroup folder of the project (ExpertsGroup\ExpertsGroup\) and copy the files: jpeglib.h, jpeg.lib, jconfig.h, jmorecfg.h and jpeb.pdb. These files are located in different folders of the project compiled in the previous problem.
Abra la carpeta del proyecto ExpertsGroup (ExpertsGroup\ExpertsGroup\) y copie los archivos: jpeglib.h, jpeg.lib, jconfig.h, jmorecfg.h y jpeb.pdb. Estos archivos están ubicados en diferentes carpetas del proyecto compilado en el problema previo.

JpegFiles

Step B
Edit the stdafx.h file as shown.
Edite el archivo stdafx.h cómo se muestra.

stdafx.h
. . .
//_________________________________________ JPEG
#include <stdio.h>
#include "jpeglib.h"
#pragma comment(lib, "jpeg.lib")
//_________________________________________ Wintempla
#include "Wintempla.h"
#include "WintemplaWin.h"
. . .


Step C
Open the jmorecfg.h file and comment the definition of INT32 as shown below.
Abra el archivo jmorecfg.h y comente la definición de INT32 cómo se muestra debajo.

jmorecfg.h
. . .
#ifndef XMD_H               /* X11/xmd.h correctly defines INT32 */
#ifndef _BASETSD_H_          /* Microsoft defines it in basetsd.h */
#ifndef _BASETSD_H          /* MinGW is slightly different */
#ifndef QGLOBAL_H          /* Qt defines it in qglobal.h */
//typedef long INT32;
#endif
#endif
#endif
#endif
. . .


Step D
Change the configuration to X64 and compile the project.
Cambie la configuración a X64 y compile el proyecto.

Step E
From Solution Explorer, select the ExpertsGroup project and right click with the mouse to open the context menu, then click on Properties to open the Properties of the project. Select "All Configurations" and change the Linker Optimization to Use Link Code Generation.
Desde el Explorador de Soluciones, seleccione el proyecto ExpertsGroup y haga clic con el botón derecho del ratón para abrir el menú de contexto, entonces haga clic en Propiedades para abrir las propiedades del proyecto. Seleccione "Todas las configuraciones" y cambie Linker Optimization a Use Link Code Generation.

LinkerOptimization

Step F
Edit the files ExpertsGroup.h and ExpertsGroup.cpp as shown.
Edite los archivos ExpertsGroup.h and ExpertsGroup.cpp cómo se muestra.

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


ExpertsGroup.cpp
. . .
void ExpertsGroup::Window_Open(Win::Event& e)
{
     const wchar_t* error = bitmap.Load(L"colorSquares.jpg");
     if (error != NULL) this->MessageBox(error, L"ExpertsGroup", MB_OK | MB_ICONERROR);
}

void ExpertsGroup::Window_Paint(Win::Event& e)
{
     CG::Gdi gdi(hWnd, true, false);
     RECT rect = { 0, 0, width, height };
     gdi.DrawBitmap(bitmap, rect, true);
}


Small PNG Images

GDI does not have any support for displaying PNG images. However, a small PNG image can be converted to an ICON image using the Sys::Convert::PngToIcon function. The function supports images of a width and a height less than (or equal to ) 256 pixels. Once the image has been converted, it can be displayed using GDI by calling the gdi.DrawIcon function.
GDI no tiene soporte para mostrar imágenes PNG. Sin embargo, una imagen PNG pequeña puede convertirse a una imagen ICON usando la función Sys::Convert::PngToIcon. La función soporta imágenes de un ancho y un alto menor (o igual) a 256 pixeles. Una vez que la imagen se ha convertido, esta puede ser mostrada usando GDI llamando la función gdi.DrawIcon.

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home