# Bilddatei (pgm-format )schreiben und Text einfügen



## Luna1000 (6. Juli 2010)

Hallo an alle, 

ich habe mit dem folgenden Code eine pgm-Datei erzeugt. 

```
#include<iostream>
#include<fstream>

using namespace std;

int main()
{
 char datei[]= "out.pgm";
 const int width = 240;
 const int height = 240;
 int data[width][height];


 for (int i=0; i<width; i++){
  for(int j=0; j< height; j++){
      data[i][j]=i;
  }
 }

 cout << "Programmstart!" << endl;

 //schreiben
 ofstream output(datei, ios::out);

 if (!output.good()){
     cout << "Can not open file: " << datei << endl;
     return 0;
 }

 cout << "Open file " << datei << "! " << endl;

 cout << "\Writing... " << endl;
 output << "P2" << endl;
 output << width << " " << height << " " << endl;
 output << "255" << endl;

 for (int i=0; i<width; i++){
  for(int j=0; j< height; j++){
     output << " 255";

  }
  output << endl; 
 }
 output.close();

 system("pause");
}
```

Nun möchte ich zusätzlich die Zahl 1oder 2 etc. in das Bild schreiben. Ist das irgendwie möglich? Wenn ja wie? Kann ich eine Zahl in ein Bild einfügen?

Vielen Dank schon mal

Luna


----------



## merano (6. Juli 2010)

Als alter  Grafikprogrammierer war ich natürlich neugierig was Du vorhast.

Das Grafik-Format kannte ich vom Namen her nicht und mit Google bin ich auch nicht weiter gekommen. Bin dann in einem alten Buch von 1994 darauf gestossen
das das Format PPM - PBMPlus Picture Format heisst und die Endungen PNM, PBM, PGM und PPM haben kann - wobei die Endung PGM (Portable Gray Map) für
Graustufen verwendet wird. Achja, und das Format wird fast ausschliesslich unter UNIX verwendet.

Mit diesen Erkenntnissen findet man dann:

PBM (engl. Portable BitMap)
http://de.wikipedia.org/wiki/Portable_Bitmap

GIMP und MATLAB können Dateien anzeigen und mit  ImageMagick kann man es konvertieren.

Netpbm is a toolkit for manipulation of graphic images
http://netpbm.sourceforge.net/   (ist sogar sehr aktuell:  netpbm-10.35.75.tgz    2010-05-31)

Es handelt sich also um ein Bild mit 256 Graustufen  das in ASCII (Code  P2) gespeichert wurde - P5 wäre das gleiche in binär. 

Also jede 255 steht  für einen weissen Pixel, eine Komprimierung gibts nicht.

Das Problem ist also eigentlich trivial zu lösen:

Man muss für jedes Pixel das einen anderen Grauwert haben soll nur eine andere Zahl verwenden.

Eine Tabelle mit  Zahlen und Buchstaben kann man sich leicht selbst auf Karopapier erstellen, das ganze dann mit einem 
Offset in die eigentliche Grafik eintragen. Also in den 90ern hätte man den Font aus dem ROM der Grafikkarte ausgelesen, 
geht heute natürlich auch noch.  

Wenn es sich nur um einige Zahlen handelt wäre der Entwurf mit Karopapier sicher der einfachste Weg.

Wie gross sollen die Zahlen sein ?  Bei variabler Grösse müsste man evtl. über Vektoren nachdenken ...

Hoffe das hilft soweit.


----------

