Manipular imagens em C

Manipular imagens em C

Neste desafio vamos tentar manipular imagens em C. Além de gerar imagens a partir de um programa, vamos precisar escrever um novo arquivo. Para geração desta imagem utilizaremos o formato PGM (Portable Gray Map). Este formato foi desenvolvido para descrever uma imagem em escala de cinza (preto e branco) e para ser fácil de implementar programas que o manipulam.

De forma simplificada, um arquivo no formato plain PGM contém os seguintes dados:

  • Um “número mágico” para identificar o tipo de arquivo, aqui o número mágico será “P2”.
  • O caractere # seguido pelo nome do arquivo.
  • A dimensão da imagem, ou seja, a quantidade de colunas (largura) e a quantidade de linhas
  • (altura) da imagem.
  • O maior valor possivel para o nível de cinza.
  • Uma matriz que representará a imagem.
 

Construa um exemplo manual primeiro

 
Faça um exemplo “na mão”. 
 
Salve este conteúdo em um arquivo txt:
 
P2
# feep.pgm
24 7
15
0   0   0   0   0   0   0   0   0   0   0   0   0  0   0   0   0   0   0   0   0   0   0   0
0   3   3   3   3   0   0   7   7   7   7   0   0  11 11 11 11   0   0  15 15 15 15 0
0   3   0   0   0   0   0   7   0   0   0   0   0  11  0   0   0   0   0   15 0 0 15    0
0   3   3   3   0   0   0   7   7   7   0   0   0  11 11 11  0   0   0   15 15 15 15 0
0   3   0   0   0   0   0   7   0   0   0   0   0  11  0   0   0   0   0   15  0  0  0   0
0   3   0   0   0   0   0   7   7   7   7   0   0  11 11 11 11   0   0   15   0  0  0  0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  0
 
 
Depois de salvar, altere a extensão deste arquivo para pgm abra-o com o photoshop ou outro editor de imagens que aceite este formato. Veja só como você deverá ver esta imagem:
 
Exemplo de imagem pgm

Usando a linguagem de progrmação

 
Agora nós vamos manipular imagens em usando a Linguagem C, para isso implemente um programa com as seguintes utilizando as seguintes assinaturas:
# ifndef PGM_H
# define PGM_H
# define MAX_LARGURA 1024
# define MAX_ALTURA 768

struct img {
      int largura;
      int altura;
      int niveisDeCinza;
      int I[MAX_ALTURA][MAX_LARGURA];
};

typedef struct img * Imagem;

Imagem novaImagem (int largura, int altura, int niveisDeCinza);

void destroiImagem (Imagem a);

void desenhaPonto (Imagem img, int x, int y, int cor);

void desenhaReta (Imagem img, int x0, int y0, int x1, int y1, int cor);

void salvaImagem (Imagem img, char *nomeArquivo);

# endif
 
Ao fim da escrita deste programa desenhe crie uma aplicação que cria um arquivo PGM que contém uma linha reta.

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta