Convertendo texto para imagem (txt2fig) PDF Imprimir E-mail
Escrito por Administrator   
Seg, 08 de Março de 2010 15:56

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

LAST_UPDATED2
 
Banner
Copyright © 2010 GNUSCIENCE.ORG. Todos os direitos reservados.
Joomla! é um Software Livre com licença GNU/GPL v2.0.