Ir ao conteúdo
  • Cadastre-se

C Reproduzir imagem através de código


BifeProgramador
Ir à solução Resolvido por arfneto,

Posts recomendados

Tenho esse código porém ele está incompleto e não sei como fazer as partes que faltam . Alguém pode me dar uma luz ? 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
   
    // FALTA FAZER
    // 1. criar o arquivo texto 'name'
    // 2. gravar o numero mágico 'P1' no arquivo
    // 3. gravar uma linha de comentário '#...'
    // 4. gravar o número de linhas e colunas
    // 5. gravar os 0's ou 1's da imagem (no máximo 100 valores por linha)
     
    
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;

    // FALTA FAZER
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc elementos  
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
    
    
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformação
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

  • Curtir 1
  • Confuso 1
Link para o comentário
Compartilhar em outros sites

Estou a 2 dias tentando fazer esse código mas nada sai..., alguém me da uma ajuda por favor eu preciso entregar ele amanhã 😭

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;

    f = fopen ("name.txt", "wt");
    if (f == NULL)
    {
        puts ("Erro ao criar arquivo");
        exit (10);
    }
   
    // FALTA FAZER
    // 1. gravar o numero mágico 'P1' no arquivo
    // 2. gravar uma linha de comentário '#...'
    // 3. gravar o número de linhas e colunas
    // 4. gravar os 0's ou 1's da imagem (no máximo 100 valores por linha)
     
    
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;
  
   f = fopen ("name.txt", "r");

    // FALTA FAZER
    // 1. ler o número de linhas e colunas
    // 2. ler o número 'n' de pontos
    // 3. alocar o vetor 'img' com nl x nc elementos  
    // 4. preencher o vetor imagem com zeros
    // 5. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
    
    
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformação
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

10 minutos atrás, arfneto disse:

acho que podia dizer o que está tentando fazer, postar o enunciado... Dizer qual sua dúvida...

 

O enunciado é esse 

 

image.thumb.png.d6e22043015027be612513584271c532.png

image.thumb.png.9454217922e35e21e883b7ba3a712104.png

image.thumb.png.a2978ce09edd1a57b95770064f4b4af1.png

Ainda estou trabalhando na função write_pbm a qual tenho q gravar os dados porém não estou sabendo como implementar isso 

 

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    
    int P1;
    
    f = fopen ("name.txt", "wt");
    if (f == NULL)
    {
        puts ("Erro ao criar arquivo");
        exit (10);
    }

    do 
    {
        scanf ("%d",&P1);
        fprintf(f, "%d" ,P1);

        scanf ("%d",&nl);
        fprintf(f, "%d" ,nl);

        scanf ("%d",&nc);
        fprintf(f, "%d" ,nc);
    }

    // PARA FAZER
    // 1. gravar o numero mágico 'P1' no arquivo
    // 2. gravar uma linha de comentário '#...'
    // 3. gravar o número de linhas e colunas
    // 4. gravar os 0's ou 1's da imagem (no máximo 100 valores por linha) 
    fclose(f);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

devia trabalhar primeiro na função que le... vai gravar o que sem ter lido?

 

o que recebeu como original? isso que postou? o que mudou?

 

tem um arquivo de entrada? não veio com o enunciado?

 

Não entendo porque não usar o formato BMP, afinal poderia testar com qualquer programa de imagem.

 

Entenda que na entrada só tem os ´1´ ...

 

Escreva uma função para mostrar na tela a imagem, ou não vai ter como testar. Faça o simples e comece com um quadradinho, ou aquele J do enunciado.

Mantenha o foco e faça passo a passo ou não vai terminar em tempo.

 

leia, mostre na tela e veja se esta igual

depois grave

e leia de novo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, arfneto disse:

devia trabalhar primeiro na função que le... vai gravar o que sem ter lido?

Eu fui nessa porque é a primeira...

 

1 minuto atrás, arfneto disse:

o que recebeu como original? isso que postou? o que mudou?

O original é esse aqui :

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    // --------------------------------------------
    // Para fazer
    // 1. criar o arquivo texto 'name'
    // 2. gravar o numero mágico 'P1' no arquivo
    // 3. gravar uma linha de comentário '#...'
    // 4. gravar o número de linhas e colunas
    // 5. gravar os 0's ou 1's da imagem
    //    (no máximo 100 valores por linha)
    // --------------------------------------------
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;
    // --------------------------------------------
    // Para Fazer
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc
    //    elementos
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher
    //    a posição correspondente de img com 1.
    // --------------------------------------------
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformação
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

3 minutos atrás, arfneto disse:

Não entendo porque não usar o formato BMP, afinal poderia testar com qualquer programa de imagem

Estou fazendo isso porque é requisitado usar esse tipo no enunciado

4 minutos atrás, arfneto disse:

Entenda que na entrada só tem os ´1´ ...

 

Escreva uma função para mostrar na tela a imagem, ou não vai ter como testar. Faça o simples e comece com um quadradinho, ou aquele J do enunciado.

Mantenha o foco e faça passo a passo ou não vai terminar em tempo.

 

leia, mostre na tela e veja se esta igual

depois grave

e leia de novo

Ta bom

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, BifeProgramador disse:
typedef int *image;

evite declarar assim. Está declarando um nome, e o nome é image

 

está criando um nome e o tipo do nome é int*

 

Use a convenção comum de usar a primeira letra em maiúscula para os nomes que define...

 

prefira

 

        typedef        int*        Image; // image eh int*

 

1 hora atrás, BifeProgramador disse:
image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

 

Isso não está bom. Retorne um ponteiro para a area alocada....

 

    Image*             aloc_memo(int,int);

 

Isso se vai usar só um formato de bits lá

1 minuto atrás, BifeProgramador disse:

Eu fui nessa porque é a primeira...

 

mas vai gravar o que se não sabe se o programa sabe ler direito?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 minuto atrás, arfneto disse:

evite declarar assim. Está declarando um nome, e o nome é image

 

está criando um nome e o tipo do nome é int*

 

Use a convenção comum de usar a primeira letra em maiúscula para os nomes que define...

 

prefira

O código já veio assim e eu não posso mudar... O professor passa o código e a gente tem que entender e completar. As únicas partes que podemos modificar é onde tem o "Para fazer"

3 minutos atrás, BifeProgramador disse:
void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    // --------------------------------------------
    // Para fazer
    // 1. criar o arquivo texto 'name'
    // 2. gravar o numero mágico 'P1' no arquivo
    // 3. gravar uma linha de comentário '#...'
    // 4. gravar o número de linhas e colunas
    // 5. gravar os 0's ou 1's da imagem
    //    (no máximo 100 valores por linha)
    // --------------------------------------------
    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    FILE *f;
    image img = NULL;
    // --------------------------------------------
    // Para Fazer
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc
    //    elementos
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher
    //    a posição correspondente de img com 1.
    // --------------------------------------------
    fclose(f);
    return img;
}

Só posso editar essa parte do código

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Está errado. Mude e resolva o problema. Depois veja o que aconteceu com o enunciado.

 

aproveite o exemplo e crie um arquivo de entrada com o ´J´ do exemplo. 

 

Veja se consegue ler

 

mostre na tela ou não vai saber se leu

 

vai saber que deu certo quando ver o J :) 

 

depois arrume a função que grava e use CLARO a função que lê para ler e a função que mostra para mostrar e quando ver o mesmo J saberá que provavelmente terminou o programa

 

:)

 

Na verdade não está errado. Só é um jeito ruim de escrever e dificulta sua vida

NUNCA defina um tipo como ponteiro. C já resolveu isso: um ponteiro é identificado por um asterisco. O simples.

 

Se usar como está escrito aí eis o que vai acontecer: ao ler o programa nunca saberá o que é o que e terá que ficar indo atrás das definições. Um b. obagem.

 

Se está no enunciado, paciência. Mas não deixe isso como hábito. É frágil e só atrapalha você e todo mundo que for ler o código

1514885460_arquivoJ.png.a340aa1abd15e92d7e763cd4673b6024.png

 

Esse é o começo: o simples. Leia como está a direita, crie o que está à esquerda.

 

leia como pts, grave como pbm. mostre na tela, grave e leia de volta. mostre para ver se está igual. É isso.

 

Sugiro fazer nessa ordem

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Já consegui fazer grande parte , só está faltando agora preencher o vetor com imagem 0 e ler as coordenadas i,j e preencher a posição correspondente com 1 .

 

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
        }
        fgets (linha,1000,f);
        while (linha[0]== '#')
        fgets (linha,1000,f);
        sscanf (linha, "%d %d", nc , nl);
        img = malloc (*nl * *nc * sizeof (int));

    for (i=0; i < (*nl) * (*nc); i++)
    {
        fscanf (f, "%d",img + i);
        
    }
    // Falta fazer
    // 1. preencher o vetor imagem com zeros
    // 2. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
 
    fclose(f);
    return img;
}

 

50 minutos atrás, arfneto disse:

Se usar como está escrito aí eis o que vai acontecer: ao ler o programa nunca saberá o que é o que e terá que ficar indo atrás das definições. Uma bobagem.

 

Se está no enunciado, paciência. Mas não deixe isso como hábito. É frágil e só atrapalha você e todo mundo que for ler o código

1514885460_arquivoJ.png.a340aa1abd15e92d7e763cd4673b6024.png

 

Esse é o começo: o simples. Leia como está a direita, crie o que está à esquerda.

 

leia como pts, grave como pbm. mostre na tela, grave e leia de volta. mostre para ver se está igual. É isso.

 

Sugiro fazer nessa ordem

Entendo e concordo com você , mas infelizmente sou obrigado a seguir desse jeito se não o professor não aceita kkkk. Acho errado isso mas fazer o que ? 😕

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 minutos atrás, BifeProgramador disse:

Já consegui fazer grande parte , só está faltando agora preencher o vetor com imagem 0 e ler as coordenadas i,j e preencher a posição correspondente com 1

 

:) Como consegui passar adiante sem ler as coordenadas?

 

leia duas a duas com fscanf(). É mais simples

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, arfneto disse:

:) Como consegui passar adiante sem ler as coordenadas?

 

leia duas a duas com fscanf(). É mais simples

Eu fiz isso mas não sei se está certo...

 

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    int i, contador;
    f = fopen (name, "wt");
    if (f==NULL)
    {
        return;
    }
    fputs("P1\n",f);
    fputs("#Olá, bem vindo a atividade6.c\n",f);
    fprintf (f, "%d %d\n", nc , nl);

    contador = 0;
    for (i=0; i < nl * nc; i++)
    {
        fprintf (f, "%d ", img [i]);
        contador++;
        if (contador == 100)
        {
           fprintf (f, "\n");
           contador = 0;
        }
    }

    fclose(f);
}

No caso eu tenho que  gravar os 0's ou 1's da imagem e no máximo 100 valores por linha

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

39 minutos atrás, arfneto disse:

leia duas a duas com fscanf(). É mais simples

No caso eu coloco isso ?

fscanf (f, "%d",i);
fscanf (f, "%d",j);

 

Eu queria saber tambem como preencher os vetores com 0 e como posso preencher essas coordenadas...

 

Se tivesse algum exemplo onde me demonstrasse o que é pra fazer ficaria mais claro, não consigo entender muito bem apenas com instruções.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

image.png.6b362bf5add2b29725adb43531f71a1b.png

 

 

Se vai ler duas a duas não vai ler uma a uma... 

 

	int n = fscanf( "%d %d", &i, &j );

 

E TESTE o retorno ou nunca vai saber se leu 2. Ou vai saber quando o programa cancelar

 

2 horas atrás, arfneto disse:

Teste o retorno de fscanf se não voltar 2 cancele o programa.... Use o arquivo como eu te mostrei

 

O programa como recebeu é muito ruim :( . Espero que tenha sido de propósito e que seu instrutor não ache que está bom...

 

2 horas atrás, BifeProgramador disse:

apenas com instruções

 

"apenas instruções" é algo divertido. 

 

Como seria melhor?  sem instruções então?

 

Eu te disse como fazer, e você está indo por outro caminho. OK, OK, eu só disse porque você perguntou e deve, claro, fazer como achar mais fácil.

 

Só que parece não estar sendo fácil. É o terceiro dia com isso, não é?

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, arfneto disse:

Como seria melhor?  sem instruções então?

 

Eu te disse como fazer, e você está indo por outro caminho. OK, OK, eu só disse porque você perguntou e deve, claro, fazer como achar mais fácil.

 

Só que parece não estar sendo fácil. É o terceiro dia com isso, não é?

Eu entendo que está apenas respondendo é que eu quis dizer que quando fala "Faça isso, coloque tal coisa em tal lugar" eu não entendo muito bem, eu entendo melhor quando demonstra onde fazer e algum exemplo. E realmente não está sendo fácil, só agora que estou conseguindo avançar mais.

 

2 horas atrás, arfneto disse:
	int n = fscanf( "%d %d", &i, &j );

Entendi

 

2 horas atrás, arfneto disse:

O programa como recebeu é muito ruim :( . Espero que tenha sido de propósito e que seu instrutor não ache que está bom..

Com certeza não foi proposital kkkkkkk

2 horas atrás, arfneto disse:
int n = fscanf( "%d %d", &i, &j );

image.thumb.png.290a50c7b7c957076d46ea7ddc8e1779.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, arfneto disse:

poste o código todo. Não um erro. É preciso saber como você declarou essas coisas

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i,j;
    int n;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
            puts ("não foi possivel abrir");
        }
        fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);
        
        sscanf (linha, "%d %d", nc , nl);
        img = malloc (*nl * *nc * sizeof (int));

    for (i=0; i < (*nl) * (*nc); i++)
    {
        
        for (j=0; j < (*nl) * (*nc); j++)
        {
    
        fscanf (f, "%d",img + i);

        n = fscanf( "%d %d", i, j );
     
        
        }
    }
  fclose(f);
    return img;
}

 

  • Curtir 1
  • Triste 1
Link para o comentário
Compartilhar em outros sites

4 minutos atrás, arfneto disse:

Então eu pego esse pedaço., edito no resto do programa que está acima e aí gero um arquivo pra eu poder compilar????

Essa é a função que ler a imagem , vou deixar o código todo pra ficar mais fácil

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#if defined(_WIN32) || defined(__WIN64__) || defined(__CYGWIN__)
#define VIEW "./i_view32"
#elif defined(__linux__)
#define VIEW "eog"
#endif

typedef int *image;

image alloc_memo(int nl, int nc)
{
    return (image)malloc(nl * nc * sizeof(int));
}

void write_pbm(image img, char *name, int nl, int nc)
{
    FILE *f;
    int i, contador;
    f = fopen ("name.txt", "wt");
    if (f==NULL)
    {
        return;
    }
    fputs("P1\n",f);
    fputs("#Olá, bem vindo a atividade6.c\n",f);
    fprintf (f, "%d %d\n", nc , nl);

    contador = 0;
    for (i=0; i < nl * nc; i++)
    {
        fprintf (f, "%d ", img [i]);
        contador++;
        if (contador == 100)
        {
           fprintf (f, "\n");
           contador = 0;
        }
    }

    fclose(f);
}

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i,j;
    int n;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
            puts ("não foi possivel abrir");
        }
        fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);
        
        sscanf (linha, "%d %d", nc , nl);
        img = malloc (*nl * *nc * sizeof (int));

    for (i=0; i < (*nl) * (*nc); i++)
    {
        
        for (j=0; j < (*nl) * (*nc); j++)
        {
    
        fscanf (f, "%d",img + i);

        n = fscanf( "%d %d", i, j );
     
        
        }
    }
    // Falta fazer
    // 1. preencher o vetor imagem com zeros
    // 2. ler as 'n' coordenadas (i, j) e preencher a posição correspondente de img com 1.
 
    fclose(f);
    return img;
}
int main(int argc, char *argv[])
{
    image in;
    char *p;
    char nameIn[40];
    char nameOut[40];
    char command[100];
    int nl, nc;
    if (argc < 2)
    {
        printf("Uso: %s <imagem[.pts]>\n\n", argv[0]);
        return 1;
    }
    if (p = strstr(argv[1], ".pts"))
        *p = 0;
    strcpy(nameIn, argv[1]);
    strcat(nameIn, ".pts");
    strcpy(nameOut, argv[1]);
    strcat(nameOut, ".pbm");

    // transformation
    in = read_pts(nameIn, &nl, &nc);
    write_pbm(in, nameOut, nl, nc);

    sprintf(command, "%s %s &", VIEW, nameOut);
    system(command);
    free(in);
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

        fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);       
        sscanf (linha, "%d %d", nc , nl);

 

O que é isso?

 

Vai ler linha e aí vai ter esse loop? Mas o enunciado nada fala sobre isso. Os comentários vão no arquivo pbm.
 

    // --------------------------------------------
    // Para Fazer
    // 1. abrir o arquivo texto 'nome' para leitura
    // 2. ler o número de linhas e colunas
    // 3. ler o número 'n' de pontos
    // 4. alocar o vetor 'img' com nl x nc
    //    elementos
    // 5. preencher o vetor imagem com zeros
    // 6. ler as 'n' coordenadas (i, j) e preencher
    //    a posição correspondente de img com 1.


Vou dizer pela terceira vez para testar o retorno de scanf()...

 

 

 

 

   for (i=0; i < (*nl) * (*nc); i++)
   {       
        for (j=0; j < (*nl) * (*nc); j++)
        {
            fscanf (f, "%d",img + i); 
            n = fscanf( "%d %d", i, j );            
        }
    }

 

Também não consigo entender essa parte.... 

 

um scanf() sem testar o retorno e lendo do arquivo, outro lendo do teclado dois valores, mas sem testar?

 

Talvez devesse ir mais devagar

 

 

 

image read_pts(char *name, int *nl, int *nc)
{
    char linha[100];
    FILE *f;
    int i,j;
    int n;
    image img = NULL;
    
    f = fopen ("name.txt", "rt");
    if (f == NULL)
    {
        puts ("Erro na ao criar arquivo");
        exit (100);
    }
    if (strcmp (linha,"P1"))
        {
            return NULL;
            puts ("não foi possivel abrir");

 

Ou eu não entendi nada do problema ou está tudo errado....

 

Como pode dar erro ao criar o arquivo se não está criando arquivo algum?

 

Onde arrumou esse P1 ?  Isso vai indicar na saída que é um arquivo do tipo 1.... na saída.

 

O que pretende com um puts() DEPOIS do return? Se já retornou não vai puts() nada...

 

O compilador não deu erro nisso?

 

 

 

 

6 minutos atrás, BifeProgramador disse:

Essa é a função que ler a imagem , vou deixar o código todo pra ficar mais fácil

Pois é. Era o que eu esperava.

 

Eu sei que essa é a função que lê. Mas eu não ia ficar recortando trechos de programa

 

Entendeu as coisas que te mostrei??? 

 

Está muito confuso e complicado o programa. Você misturou as coisas.

Link para o comentário
Compartilhar em outros sites

6 minutos atrás, arfneto disse:
fgets (linha,1000,f);
        while (linha[0]=='#')
        fgets (linha,1000,f);       
        sscanf (linha, "%d %d", nc , nl);

 

O que é isso?

Lê e verifica se tem comentário, e se tiver ele ler o comentário 

 

14 minutos atrás, arfneto disse:
   sscanf (linha, "%d %d", nc , nl);

Lê o numero de linhas e colunas

Link para o comentário
Compartilhar em outros sites

Está errado

 

Devia fazer como te expliquei :( 

 

E não leu o que escrevi há pouco? Está confundindo tudo.

 

Não há comentários na entrada. Não cria arquivos na entrada, Não lê do teclado em momento algum! Leia o enunciado de novo...

 

 

 0 vou escrever uma 4a vez: teste o retorno de scanf()

image.png.d422f22d5125cfad91c08b38c32a2b37.png

 

 

?????

Veja o que te falei no primeiro post :(

 

Teste com o exemplo....

 

10 6
11
0 4
1 4
2 4
3 4
4 4
5 4 
6 0
6 4
7 1
7 2
7 3

 

O simples J....

 

 

Como eu te mostrei e como está no seu enunciado.... O simples.

 

 

image.png.1c6f0269a7300435a149edbaba54e8be.png

 

É muito mais fácil quando você sabe o que esperar.

 

É o que estou tentando te dizer...

 

Aquele arquivo tem que gerar esse arquivo, o simples. O comentário é irrelevante. Desde que tenha um

O número "magico" nada tem de mágico. Apenas o tal programa eog no linux vai rodar isso e mostrar a imagem, ou o i_view32 no Windows. 

 

Leia o programa que recebeu... o número nada mágico indica se é uma imagem colorida, preto e branco ou o tal PBM ASCII. No caso o 1

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, arfneto disse:

Está errado

 

Devia fazer como te expliquei :( 

 

E não leu o que escrevi há pouco? Está confundindo tudo.

 

Não há comentários na entrada. Não cria arquivos na entrada, Não lê do teclado em momento algum! Leia o enunciado de novo...

 

 

 0 vou escrever uma 4a vez: teste o retorno de scanf()

Não tem como eu testar se não está completo .

Como vou testar o J sem ter implementado ainda a leitura nas linhas e colunas e transformar em 1 ? 

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, BifeProgramador disse:

Não tem como eu testar se não está completo .

Como vou testar o J sem ter implementado ainda a leitura nas linhas e colunas e transformar em 1 ?

 

Leu tudo o que eu expliquei? Tem vários problemas no seu código.

 

Um simples loop depois de ler já testa o J: vai ver um J na tela, se fizer como eu disse

 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...