Processamento
Digital de Imagens
Processamento de Cores
Segue o
programa em linguagem C para inverter cores de uma imagem de 24 bits.
#include <stdio.h>
#include <malloc.h>
main()
{
FILE *fpi, *fpo;
unsigned char *buffer;
int nlin,ncol,l,c,cor;
char nome_origem[150], nome_destino[150];
// Le nome do arquivo de entrada
printf("\nEntre com nome do arquivo de entrada: ");
scanf("%s",nome_origem);
// Abre o arquivo de entrada (origem) e testa sua existencia
if ( (fpi = fopen(nome_origem, "rb")) == NULL)
{
printf("\nNao pode abrir o arquivo
de Origem");
exit(1);
}
// Le nome do arquivo de saida (destino
printf("\nEntre com nome do arquivo de Destino: ");
scanf("%s",nome_destino);
// Cria o arquivo de saida e testa sua permissao de abertura
if ( (fpo = fopen(nome_destino, "wb")) == NULL)
{
fclose(fpi);
printf("\nNao pode criar o arquivo
de Destino");
exit(1);
}
// Le nro de linhas e colunas do usuario
printf("\nEntre com o nro de
colunas da imagem: ");
scanf("%d",&ncol);
printf("\nEntre com o nro de
linhas da imagem: ");
scanf("%d",&nlin);
// Aloca dinamicamente o buffer de cada linha
buffer = malloc(ncol*sizeof(char));
if( buffer == NULL)
{
printf("Nao alocou memoria para o buffer");
getchar(); return 1;
}
// Processa dados da imagem, linha a linha
for(cor=0; cor<3; cor++){
for(l=0; l<nlin; l++)
{
// Le linha l do arquivo de entrada
fread(buffer, sizeof(char), ncol,
fpi);
// Modifica linha l
for(c=0;
c<ncol; c++)
buffer[c]=~buffer[c];
//
buffer[c]= 255-(unsigned char)buffer[c];
// Escreve linha l no arquivo de saida
fwrite(buffer, sizeof(char), ncol,
fpo);
}
}
fclose (fpi);
fclose (fpo);
free (buffer);
getchar();
}
|