png processing with C

Gast
> Ist libpng Teil der Standardbibliothek
nein, aber dafür gibt es sei ja frei im Internet. Auch die Doku auf der 
Homepage erklärt eignetlich alles was mach braucht.
Gast
Hallo zusammen.

Ich habe mich gestern und heute nochmals ausführlich mit diesem 
Themenbereich beschäftigt und bin dabei leider auf viele Probleme beim 
Umgang mit den von euch empfohlenen Libs gestoßen. Ein Freund hat mich 
nun jedoch auf das PNM-Format hingewiesen, ds äußerst leicht zu lesen 
und schreiben ist. NähereInformationen findet ihr unter folgendem Link:

http://en.wikipedia.org/wiki/Netpbm_format#Reading_and_Writing_PGM_Image_Using_C.5Bclarification_needed.5D

Leider sind dabei nun auch ein paar Probleme aufgetreten. Ich habe das 
Programm in seinem momentanen Satus mittels

gcc -ansi -o pxm pxm.c

geparst. Leider bekomme ich einen Segmentation fault error und ich weiß 
beim besten Willen nicht, woran das liegt. Ich habe mir die Zeit 
genommen meinen Code ausführlich zu dokumentieren und wäre euch sehr 
dankbar, wenn ihr mal einen Blick auf meinen Quellcode werfen könntet. 
Meine pxm.c findet ihr im Anhang. Vielen dank für euer Verständnis und 
eure Hilfe.

MfG, Andy
Angehängte Dateien:
Gast
Da liegt Dein Fehler:
1
  /* loop over image rows */
2
  for(i = 0; i < pic.height; i++)
3
  {
4
    /* loop over image columns */
5
    for(j = 0; j < pic.width; j++)
6
    {
7
      tmp = rand() % 255 + 1;
8
      pic.matrix[i][j].red = tmp;
9
      tmp = rand() % 255 + 1;
10
      pic.matrix[i][j].green = tmp;
11
      tmp = rand() % 255 + 1;
12
      pic.matrix[i][j].blue = tmp;
13
    }
14
  }

Genauer gesagt da:
1
 pic.matrix[i][j].red = tmp;

und dann entsprechend weiter.
Gast
Und was ist daran falsch? pic ist doch ein Object vom Strukturtyp pnm 
und somit kann ich mit hilfe des Punkt-Operators auf dessen Werte (in 
meinem Fall die Matrix) zugreifen. Die Matrix ist aber nur eine reihe 
von Pointern auf Pixel-Strukturen. Deshlab sollte dieser Zugriff doch 
möglich sein? Entschuldige, wenn ich da falsch liege. Beschäftige mich 
keine 3 Wochen mit C.

MfG, Andy
Gast
Entschuldigt das doppelte Posting. hatte noch etwas Probleme und habe 
nun versucht meinen zugriff auf die Matrix durch eine neue Allocierung 
des Speichers zu beheben. das funktioniert leider auch nicht kann mir 
jemand sagen warum dies so ist?

MfG, Andy

1
pixel **pnmalloc(unsigned int n, unsigned int m)
2
{
3
  /* init matrix pointer */
4
  pixel **p;
5

6
  /* allocate space for rows */
7
  p = (pixel **) malloc(n * sizeof(pixel *));
8

9
  /* validate pointer */
10
  if( p != NULL )
11
  {
12
    /* allocate first column */
13
    p[0] = (pixel *) malloc(n * m * sizeof(pixel));
14

15
    /* validate pointer */
16
    if( p[0] == NULL )
17
    {
18
      /* set pointer to NULL */
19
      free(p);
20
      p = NULL;
21
    }
22

23
    else
24
    {
25
      /* init helper var */
26
      unsigned int i;
27

28
      /* loop over rest of columns */
29
      for(i = 1; i < m; i++)
30
      {
31
        p[i] = p[i-1] + m;
32
      }
33
    }
34
  }
35

36
  return p;
37
}
38

39
void pnmfree(pixel **p)
40
{
41
  /* check for NULL pointer */
42
  if( p != NULL )
43
  {
44
    free(p[0]);
45
  }
46

47
  /* free space */
48
  free(p);
49
}
Die Speicherallocierung habe ich daraufhin wie folgt geändert.
1
  /* init picture */
2
  pnm pic =
3
  {
4
    50,
5
    100,
6
    255,
7
    3,
8
    (pixel **) pnmalloc(pic.width, pic.height)
9
  };

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.