Tip |
The following codes illustrates how to navigate character by character in a wstring variable. Los códigos siguientes ilustran como navegar letra por letra in una variable wstring. |
Program.cpp |
wstring info = L"Hola Ben"; //__________________________________ Method 1 size_t i; const size_t len = info.size(); for (i = 0; i < len; i++) { if (info[i] == ' ') break; } //__________________________________ Method 2 std::wstring::iterator p; const std::wstring::iterator pend = info.end(); for (p = info.begin(); p != pend; p++) { if (*p == ' ') break; } |
Parsing |
As computers use text to store and send information, strings and string manipulation are very important. Parsing is the process of extracting values from a string. Como las computadoras usan texto para almacenar y enviar información, las cadenas de texto y su manipulación son muy importantes. Parsing es el proceso de extraer valores desde una cadena de texto. |
Portable Gray Map (PGM) |
A PGM file is a format to store images using bitmaps (pixel by pixel information). The PGM file has only ASCII text. This format is oriented to ease image processing, because it is possible to represent a low resolution image using a matrix. Una archivo PGM es un formato para guardar imágenes en mapa de bits (información a pixel por pixel). El archivo PGM contiene sólo texto en ASCII. Este formato está orientado para facilitar el procesamiento de imágenes, ya es posible tener una matriz representando la imagen principal con muy poca resolución. |
PGM file |
The format of this file is:
|
Tip |
Because computers work with UNICODE, it is necessary to convert the file text from ASCII (string) to UNICODE (wstring) using Sys::Convert::StringToWstring so that the computer can process the text. In the same way, to write a PGM file the generated text by the computer (UNICODE) must be converted to ASCII before storing the text in the file. To save and load text you may use: Sys::FileAssistant::TextLoad and Sys::FileAssistant::TextSave. Debido a que las computadoras trabajan con UNICODE es necesario convertir el texto de este archivo de ASCII (string) a UNICODE (wstring) usando Sys::Convert::StringToWstring para que la computadora pueda procesar el archivo. De igual forma, para escribir un archivo PGM el texto generado por la computadora (UNICODE) se debe convertir a ASCII antes de ser almacenado en el archivo. Para guardas y cargar texto usted puede usar: Sys::FileAssistant::TextLoad and Sys::FileAssistant::TextSave. |
Problem 1 |
Create a Wintempla Dialog Application called EditorPgm to create, open and save PGM files. Create a class called ImagenPgm to manipulage PGM images: create a new image, save a image to a file, load an existing image and edit an existing image. Insert a ScrollControl using Wintempla to visualize the image. The ImagenPgm class is responsible to draw the rectangle of the respective color in each cell of the ScrollControl. Cree una aplicación de Diálogo de Wintempla llamada EditorPgm para crear, abrir y guardar archivos PGM. Crear la clase ImagenPgm para manipular imágenes PGM: crear una nueva, guardar en archivo, cargar desde un archivo y editar una imagen existente. Inserte un ScrollControl usando Wintempla para visualizar la imagen. La clase ImagenPgm es reponsable de dibujar el rectángulo del color respectivo en cada celda del ScrollControl. |
ImagenPgm.h |
#pragma once #define PGM_ST_INIT 0 #define PGM_ST_MAGIC_NUMBER 1 #define PGM_ST_COMMENT 2 #define PGM_ST_WIDTH 3 #define PGM_ST_HEIGHT 4 #define PGM_ST_MAXGRAY 5 #define PGM_ST_PIXELS 6 class ImagenPgm { public: ImagenPgm(void); ~ImagenPgm(void); bool CreateP2(int width, int height, int colorResolution, const wchar_t* comment); bool Save(const wchar_t* filename); wchar_t* Load(const wchar_t* filename); int GetWidth(); int GetHeight(); int GetPixel(int x, int y); bool SetPixel(int x, int y, int value); int GetColorResolution(); void DrawPixel(CG::Gdi& gdi, int x, int y, RECT& rcCell); private: inline bool IsSeparator(wchar_t c); inline bool IsDigit(wchar_t c); MATRIX pixel; int colorResolution; wstring comment; bool ExtractInt(wstring& text, int& position, int& out_int); }; |
EditorPgm.h |
#pragma once //______________________________________ EditorPgm.h #include "resource.h" #include "ImagenPgm.h" class EditorPgm: public Win::Dialog { public: EditorPgm() { } ~EditorPgm() { } ImagenPgm imagenPgm; protected: ... }; |
EditorPgm.cpp |
... void EditorPgm::Window_Open(Win::Event& e) { //________________________________________________________ scrollPgm scrollPgm.RowHeight = 4; scrollPgm.ColumnWidth = 4; scrollPgm.RefreshAll(); } void EditorPgm::scrollPgm_RequestInfo(Win::Event& e) { Win::ITable::Info& info = *((Win::ITable::Info*)(e.lParam)); info.rowCount = imagenPgm.GetHeight(); info.columnCount = imagenPgm.GetWidth(); } void EditorPgm::scrollPgm_PaintCellsBegin(Win::Event& e) { //Win::ITable::PaintEvent& pe = *((Win::ITable::PaintEvent*)(e.lParam)); //CG::Gdi& gdi = *pe.gdi; } void EditorPgm::scrollPgm_PaintCell(Win::Event& e) { Win::ITable::PaintEvent& pe = *((Win::ITable::PaintEvent*)(e.lParam)); CG::Gdi& gdi = *pe.gdi; imagenPgm.DrawPixel(gdi, pe.col, pe.row, pe.cell); } void EditorPgm::scrollPgm_PaintCellsEnd(Win::Event& e) { //Win::ITable::PaintEvent& pe = *((Win::ITable::PaintEvent*)(e.lParam)); //CG::Gdi& gdi = *pe.gdi; } |
Tip |
The following code illustrates how to reverse a string of text. El código de abajo ilustra cómo invertir las letras de una cadena de texto. |
Program.cpp |
wstring a(L"Hello"); std::reverse(a.begin(), a.end()); |