Olá, estou fazendo um projeto e estou tendo um problema que esta quebrando minha cabeça. Esse código é para receber uma imagem e criar uma copia idêntica dela, porém ao criar a imagem ele só pega 1/4 dela, o resto fica preto.. ele não esta conseguindo pegar toda a matriz por algum motivo, acredito que eu tenha errado algo na alocação.
vou colocar as imagens .ppm zipadas.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
unsigned char r,g,b; //struct dos pixels em RGB;
}pixel;
int main(){
FILE *image;
FILE *newImage;
char key[5];
int i,j, larg, alt, max;
image = fopen("Normal2.ppm", "r"); //Lê o arquivo orignal
if(image == NULL)
{
printf("Erro na abertura do arquivo \n");
return 0;
}
fscanf(image, "%s", key);//key é p3;
if(strcmp(key, "P3") != 0){
printf("Arquivo n é PPM\n");//checa se esta em P3
printf("%s\n",key );
fclose(image);
return 0;
}
fscanf(image, "%d %d\n%d\n", &larg, &alt, &max);//le o cabeçario
printf("larg =%d alt=%d key=%s max=%d\n",larg, alt, key,max );//printa na tela os valores lidos
newImage = fopen("arquivo.ppm","w+"); //abre o novo arquivo que vai ser criado
if(newImage == NULL){
printf("ERRO AO ABRIR NEWIMAGE");
return 0;
}
pixel **RGB =(pixel**)malloc(larg*sizeof(pixel*));//cria e aloca espaço para a matriz
for(i=0;i<larg;i++){ // que vai receber as infos do arquivo original
RGB[i] = (pixel*)malloc(alt*sizeof(pixel));
}
for(i=0; i<larg;i++){ //lê as infos da matriz original
for(j=0;j<alt;j++){
fscanf(image, "%c", &RGB[i][j].r );
fscanf(image, "%c", &RGB[i][j].g );
fscanf(image, "%c", &RGB[i][j].b );
}
}
fprintf(newImage, "P3\n%d %d\n%d\n",larg,alt,max);//grava as infos novas
for(i=0;i<larg;i++){
for(j=0;j<alt; j++){
fprintf(newImage, "%c%c%c", RGB[i][j].r, RGB[i][j].g, RGB[i][j].b );
}
}
fclose(image);
fclose(newImage);
return 0;
}
se alguem puder me dar uma mão ficaria bem feliz
fotos.zip