Abrindo e Salvando Arquivos em PPM
Por: caiocaio9009 • 20/11/2020 • Pesquisas Acadêmicas • 3.844 Palavras (16 Páginas) • 158 Visualizações
/*
//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
}
}
}
}
*/
...