|
Este artigo é uma continuação do bmp2txt e mostra como transformar um arquivo no formato texto para imagem. Este assunto é importante para quem trabalha com simulações e deseja ver os resultados de maneira gráfica, ou seja, como uma imagem. Para quem trabalha com autômatos celulares e similares é uma ferramenta fundamental!
Uma biblioteca que podemos utilizar neste caso é a biblioteca g2. g2 é uma biblioteca simples de usar em aplicações gráficas 2D. Ela fornece um conjunto abrangente de funções para a geração simultânea da produção gráfica em diferentes tipos de dispositivos: X11, PostScript, GD (PNG e JPEG), e MS Windows. Suporta linguagens de programação Perl, Python, Fortran e em C. O código fonte (escrito em C) que vai ser apresentado no GNUscience pode ser usado para ler um arquivo no formato texto contendo as informações da imagem a ser gerada e retornar um arquivo de saída do tipo PNG (existem outros formatos, existem outros formatos, consultar manual g2). Este código fonte é de grande interesse para quem roda os seus programas em máquinas sem monitor (ou que não tenham o ambiente gráfico instalado), ou ainda no caso em que as simulações levem um grande tempo computacional para serem realizadas.
O arquivo texto que serve como entrada para o nosso programa deverá conter as seguintes informações:
Linha 1: dimensões da figura L(largura) H(altura) Linha 2 em diante: Posição X Y e o número da cor (ver código fonte)
O código fonte:
//www.gnuscience.org #include <stdio.h> #include <g2.h> #include <g2_gd.h>
int main(int err, char **arg) { //VERIFICA ARGUMENTOS if(err != 3) { printf("sintax: %s + file_in + file_out\n",arg[0]); }
//ABRE ARQUIVOS DE ENTRADA FILE *input; input=fopen(arg[1],"r"); if(!input) printf("Erro na abertura do arquivo de entrada");
//DEFINE DIMENSOES DA JANELA GRAFICA int X,Y; fscanf(input,"%d %d \n",&X,&Y);
//ABRE JANELA GRAFICA int FIG; FIG=g2_open_gd(arg[2],X, Y,g2_gd_png);//para jpg, substitua g2_dg_png para g2_gd_jpeg
int color[13]; //DEFINE CORES color[0]=g2_ink(FIG, 1.0, 1.0, 1.0); //branco color[1]=g2_ink(FIG, 0.0, 0.0, 0.0); //preto color[2]=g2_ink(FIG, 1.0, 0.0, 0.0); //vermelho color[3]=g2_ink(FIG, 0.0, 1.0, 0.0); //verde color[4]=g2_ink(FIG, 0.0, 0.0, 1.0); //azul color[5]=g2_ink(FIG, 230./255., 230./255., 230./255.); //cinza color[6]=g2_ink(FIG, 244./255., 255./255., 33./255.); //amarelo color[7]=g2_ink(FIG, 20./255., 255./255., 233./255.); //turquesa color[8]=g2_ink(FIG, 255./255., 170./255., 22./255.); //laranja color[9]=g2_ink(FIG, 255./255., 61./255., 249./255.); //rosa color[10]=g2_ink(FIG,19./255., 149./255., 14./255.); //verde escuro color[11]=g2_ink(FIG, 116./255., 76./255., 56./255.); //marrom color[12]=g2_ink(FIG, 244./255., 255./255., 33./255.); //amarelo
int x,y,cor; do { fscanf(input,"%d %d %d \n",&x,&y,&cor); g2_pen(FIG,color[cor]); g2_plot(FIG,x,Y-1-y); } while(!feof(input));
fclose(input); g2_close(FIG);
return 0; }
Para compilar o código fonte é preciso ter a biblioteca g2 instalada. No caso do linux (UNIX) a linha de comando para compilar/executar seria a seguinte: g++ arquivofonte.c -lg2 -o nome_arquivo_executavel
./nome_arquivo_executavel arquivo_entrada arquivo_imagem.png
Um nome bem sugestivo para o executável seria "txt2fig". Utilizando se do exemplo do artigo bmp2txt, teríamos o seguinte arquivo de entrada: 5 5 1 1 1 1 3 1 2 2 1 3 2 1 4 4 1
Neste caso o programa retornaria uma imagem PNG igual a mostrada no artigo bmp2txt. Key words: linux,FreeBSD, C++, FORTRAN,txt2fig, PNG, G2 |