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();

}

Up