TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Abrindo e Salvando Arquivos em PPM

Por:   •  20/11/2020  •  Pesquisas Acadêmicas  •  3.844 Palavras (16 Páginas)  •  152 Visualizações

Página 1 de 16

/*

//Abrindo e salvando arquivos em PPM

#include <stdio.h>

#define MAX 500

typedef struct

{

int r, g, b;

}

pixel;

int main

(int argc, char** argv)

{

pixel imagem[MAX][MAX]; //cria uma matriz de pixeis para armazenar a imagem

char code[3]; //o código para saber se a imagem é ascii ou binária

int max; //o valor máximo de tonalidade de cada pixel

int larg, alt; // largura e altura da imagem em pixeis

return 0;

}

//A função main contém a criação das variáveis e da matriz imagens. A matriz imagem é composta pelo tipo pixel, que por sua vez abriga em sua estrutura três inteiros, r, g, b, cada um contendo um tom, como foi anteriormente mencionado. Fora isso, ela tem apenas as chamadas de funções, que serão explicadas a seguir.

////////

//A função ler_ascii faz a leitura do arquivo quando está no formato ascii.

void ler_ascii(pixel imagem[MAX][MAX], char *code, int *max, int *coluna, int *linha) {

int i, j;

FILE *arquivo;

char nome_arq[50];

printf("entre com o nome do arquivo\n");

scanf("%s", nome_arq);

if ((arquivo = fopen(nome_arq, "r")) == NULL) {

printf("Erro ao abrir o arquivo %s\n", nome_arq);

}

fscanf(arquivo, "%s", code);

fscanf(arquivo, "%d", coluna);

fscanf(arquivo, "%d", linha);

fscanf(arquivo, "%d", max);

for (i = 0; i < *linha; i++) {

for (j = 0; j < *coluna; j++) {

fscanf(arquivo, "%d", &imagem[i][j].r);

fscanf(arquivo, "%d", &imagem[i][j].g);

fscanf(arquivo, "%d", &imagem[i][j].b);

}

}

fclose(arquivo);

}

//O funcionamento dela é simples de entender, primeiro pega o código da imagem, depois as dimensões e por fim o valor máximo, após isso entra em um loop que percorre a matriz salvando cada tom de cada pixel na estrutura imagem.

///////

//A função salvar_ascii salva o arquivo no padrão ascii.

void salvar_ascii(pixel imagem[MAX][MAX], char *code, int max, int coluna, int linha) {

int i, j;

FILE *arquivo;

char nome_arq[50];

printf("entre com o nome que deseja salvar: \n");

scanf("%s", nome_arq);

arquivo = fopen(nome_arq, "r");

fprintf (arquivo, "P3\n");

fprintf (arquivo, "%d\n ", coluna);

fprintf (arquivo, "%d\n", linha);

fprintf (arquivo, "%d\n", max);

for (i = 0; i < linha; i++) {

for (j = 0; j < coluna; j++) {

fprintf(arquivo, "%d ", imagem[i][j].r);

fprintf(arquivo, "%d ", imagem[i][j].g);

fprintf(arquivo, "%d\n", imagem[i][j].b);

}

}

fclose(arquivo);

}

//Parecida com a anterior, as diferenças estão na passagem dos valores que é feita por parâmetro e não por referência já que as mesmas não serão alteradas. Outra coisa diferente é que o "code" da imagem já é salvo como P3, e não pega o char code, pois isso evita o erro ao salvarmos uma imagem de um arquivo aberto que estava em binário.

/////////////

//////////////////////////////////////////////////

//FUNÇÃO BINARIZAÇÃO

void binarizacao(){

float limiteimagem = 255;

for (int x = 0; x < source.width; x++) {

for (int y = 0; y < source.height; y++) {

int loc = x + y * source.width;

// Test the brightness against the threshold

if (brightness(source.pixels[loc]) > limiteimagem) {

destination.pixels[loc] = color(255); // White

} else {

destination.pixels[loc] = color(0); // Black

}

}

}

}

*/

...

Baixar como (para membros premium)  txt (21.7 Kb)   pdf (67.8 Kb)   docx (23.6 Kb)  
Continuar por mais 15 páginas »
Disponível apenas no TrabalhosGratuitos.com