PPM Image


Portable Anymap Format (PNM)

PNM is a collection of three image formats: The Portable PixMap Format (PPM with RGB colors from 0 to 255), the Portable GrayMap Format (PGM with gray scales colors from 0 to 255), and the Portable BitMap Format (PBM with two colors: black and white). They are file formats designed to exchange images between platforms.
PNM es una colección de tres formatos de imagen: el Formato Portable Pixmap (PPM con colores RGB desde 0 a 255), el Formato Portable de Mapas de Grises (PGM con colores en la escala de grises de 0 a 255) y el Formato Portable de Bitmaps (PBM con dos colores: blanco y negro). Estos son formatos de archivos diseñados para intercambiar imágenes entre distintas plataformas.

File Format Description

The file starts with the P character (one-byte in ASCII). After that there is a number:
  • P1 for an ASCII file storing a Portable BitMap (PBM) *.pbm
  • P2 for an ASCII file storing a Portable GrayMap (PGM) *.pgm
  • P3 for an ASCII file storing a Portable PixMap (PPM) *.ppm
  • P4 for a binary file storing a Portable BitMap (PBM) *.pbm
  • P5 for a binary file storing a Portable GrayMap (PGM) *.pgm
  • P6 for a binary file storing a Portable PixMap (PPM) *.ppm
The file has then three numbers (each one in ASCII): the width, the height, and the maximum value for the color values (the minimum value is always zero). The file then has exactly the width times the height values; each value for each pixel in the image as shown in the figure below.
El archivo comienza con la letra P (un byte en ASCII). Después de este hay un número:
  • P1 para un archivo ASCII almacenando un BitMap Portable (PBM) *.pbm
  • P2 para un archivo ASCII almacenando un GrayMap Portable (PGM) *.pgm
  • P3 para un archivo ASCII almacenando un PixMap Portable (PPM) *.ppm
  • P4 para una archivo binario almacenando un BitMap Portable (PBM) *.pbm
  • P5 para una archivo binario almacenando un GrayMap Portable (PGM) *.pgm
  • P6 para una archivo binario almacenando un PixMap Portable (PPM) *.ppm
El archivo tiene entonces tres números (cada uno en ASCII): el ancho, el alto y el máximo valor para los valores de los colores (el valor mínimo es siempre cero). El archivo entonces tiene exactamente el ancho veces la altura valores; cada valor por cada pixel en la imagen como se muestra en la figura de abajo.

PpmFormat

Format    Bytes per pixel (binary format)  
PBM1 (black = 0 and white = 1)
PGM8 (black = 0,..., gray = 128, ..., white = 255)
PPM24 (8 bits for red, 8 bits for green, 8 bits for blue)

Comments

Each line that begins with the # characters is considered a comment, and therefore, this line is ignored.
Cada línea que comienza con el carácter # es considerada un comentario, y por lo tanto, ésta línea es ignorada.

Sys:PortablePixMap

Wintempla provides the Sys:PortablePixMap class to manipulate PPM images. You are welcome to inspect this class.
Wintempla proporcionar la clase Sys:PortablePixMap para manipular imágenes PPM. Se le invita a inspeccionar esta clase.

Problem 1
Create a Wintempla Window application called PpmViewer to display a PPM image (Be sure to choose Window Application instead of Dialog Application when creating the project). Do not forget to check the Paint event in the main window (Open Wintempla, double click anywhere in the editor to open the Window Properties dialog, in the Event tab: check Paint). For this problem you will need a PPM file, you may convert any image file to a PPM file using an online image converter in the Internet.
Cree una aplicación de Ventana usando Wintempla llamada PpmViewer para mostrar una imagen PPM (Asegúrese de escoger Window Application en lugar de Dialog Application cuando cree el proyecto). No se olvide de marcar el evento Paint en la ventana principal. (Abra Wintempla, haga doble clic en cualquier parte del editor para abrir el diálogo de Propiedades de la Ventana, en la pestaña de Event: seleccione Paint). Para este problema usted necesitará un archivo PPM, usted puede convertir cualquier archivo de imagen a un archivo PPM usando un convertidor de imágenes online en la Internet.

PaintEvent

PpmViewer.h
#pragma once //______________________________________ PpmViewer.h
#include "Resource.h"
class PpmViewer: public Win::Window
{
public:
     PpmViewer()
     {
     }
     ~PpmViewer()
     {
     }
     Sys::Graphics graphics;
     ...
};

PpmViewer.cpp
...
// REMEMBER THAT THIS IS A WINDOW APPLICATION
void PpmViewer::Window_Open(Win::Event& e)
{
     Sys::PortablePixMap ppm;
     const wchar_t* error = ppm.Load(L"sky.ppm", graphics);
     if (error != NULL)
     {
          this->MessageBox(error, L"PpmViewer", MB_OK | MB_ICONERROR);
     }
     this->Repaint(NULL, true);
}

void PpmViewer::Window_Paint(Win::Event& e)
{
     CG::Gdi gdi(hWnd, true, false);
     gdi.DrawGraphics(graphics, 0, 0);
}


PpmViewerRun

Problem 2
Create a Wintempla Dialog application called PpmCreator to create a PPM file. If you do not have a PPM viewer, you can use the viewer of the previous problem or convert the file using an online Image Converter in the Internet. You can also use the CG::DIBitmap::ImportPortablePixMap function to convert a PPM file to a bitmap, and thus, display (or process) the image.
Cree una aplicación de Diálogo usando Wintempla llamada PpmCreator para crear un archivo PPM. Si usted no tiene un visor de PPM, usted puede usar el visor del problema previo o convertir el archivo usando un convertido de Imágenes online en la Internet. Usted también puede usar la función CG::DIBitmap::ImportPortablePixMap para convertir un PPM a un mapa de bits, y así, mostrar (o procesar la imagen.

PpmCreator.cpp
...

void PpmCreator::Window_Open(Win::Event& e)
{
     Sys::Graphics graphics;
     graphics.Create(400, 300);
     graphics.SetAllPixels(RGBX(225, 225, 255));
     graphics.Line(50, 20, 200, 250, RGBX(200, 20, 20));
     //
     Sys::PortablePixMap ppm;
     const wchar_t* error = ppm.Save(L"myline.ppm", graphics);
     if (error != NULL)
     {
          this->MessageBox(error, L"PpmCreator", MB_OK | MB_ICONERROR);
     }
}


myline

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