Lese - /Schreibzugriff auf PPM-Image-Datei von C++
Versuchen zu Lesen und zu schreiben zu/aus einer PPM-Image-Datei (.ppm) in der einzige Weg, ich weiß, wie:
std::istream& operator >>(std::istream &inputStream, PPMObject &other)
{
inputStream.seekg(0, ios::end);
int size = inputStream.tellg();
inputStream.seekg(0, ios::beg);
other.m_Ptr = new char[size];
while (inputStream >> other.m_Ptr >> other.width >> other.height >> other.maxColVal)
{
other.magicNum = (string) other.m_Ptr;
}
return inputStream;
}
Meine Werte entsprechen der aktuellen Datei. Also habe ich fröhlich versuchen, die Daten zu schreiben:
std::ostream& operator <<(std::ostream &outputStream, const PPMObject &other)
{
outputStream << "P6" << " "
<< other.width << " "
<< other.height << " "
<< other.maxColVal << " "
;
outputStream << other.m_Ptr;
return outputStream;
}
Ich bin dafür, dass öffnen der Datei mit std::ios::binary zum Lesen und schreiben:
int main ()
{
PPMObject ppmObject = PPMObject();
std::ifstream image;
std::ofstream outFile;
image.open("C:\\Desktop\\PPMImage.ppm", std::ios::binary);
image >> ppmObject;
image.clear();
image.close();
outFile.open("C:\\Desktop\\NewImage.ppm", std::ios::binary);
outFile << ppmObject;
outFile.clear();
outFile.close();
return 0;
}
Logik-Fehler:
Ich nur schriftlich ein Teil des Bildes. Es ist kein problem mit der Kopf-oder öffnen Sie die Datei manuell.
Klasse public-member-Variablen:
Den m_Ptr member-variable ist ein char * und die Höhe, die Breite maxColrVal sind alle ganzen zahlen.
Versuchte Lösung:
Mittels inputStream.lese-und Ausgabestrom.schreiben Sie Daten Lesen und schreiben, aber ich weiß nicht, wie und was ich versucht habe funktioniert nicht.
Da mein char * m_Ptr enthält alle Pixeldaten. Ich kann Durchlaufen wird:
for (int I = 0; I < other.width * other.height; I++) outputStream << other.m_Ptr[I];
Aber dies führt zu einem Laufzeit-Fehler aus irgendeinem Grund..
InformationsquelleAutor user4640007 | 2015-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf http://fr.wikipedia.org/wiki/Portable_pixmap, P6 ist ein binäres Bild.
Das liest sich ein einziges Bild. Beachten Sie, dass keine Prüfung durchgeführt. Dies muss Hinzugefügt werden.
Dieser code schreibt ein einzelnes Bild.
m_Ptr enthält nur die RGB-pixel Werte.
Getestet habe ich den code auf einem Bild, das ich aus dem Internet heruntergeladen (http://igm.univ-mlv.fr/~incerti/BILDER/FARBE/Antenne.512.ppm) und mit der folgenden Struktur PPMObject es funktionierte.
Es ist deklariert als string ? Sollte es denn wir Lesen wollen "P6".
Ja, es ist std::string
Wenn es eine ganze Zahl, die der compiler freut sich. Aber nichts ist, Lesen Sie in der member-Variablen.
Das ist normal, da die Datei beginnt mit der Zeichenfolge "P6". Haben Sie angezeigt, den Kopf der Datei ?
InformationsquelleAutor chmike