Lesen / Schreiben in PPM-Image-Datei C ++

Versuchen, eine PPM-Image-Datei (.ppm) auf die einzige Art und Weise zu lesen und zu beschreiben, die ich kenne:

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 tatsächlichen Datei. Also versuche ich fröhlich 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 stelle sicher, dass die Datei mit std :: ios :: binary sowohl zum Lesen als auch zum Schreiben geöffnet wird:

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;
}

Logic Error:

Ich schreibe nur einen Teil des Bildes. Es gibt kein Problem mit dem Header oder dem manuellen Öffnen der Datei.

Öffentliche Membervariablen der Klasse:

Die Membervariable m_Ptr ist ein Zeichen * und height, width und maxColrVal sind ganze Zahlen.

Versuchte Lösung:

Verwenden von inputStream.read und outputStream.write zum Lesen und Schreiben von Daten, aber ich weiß nicht, wie und was ich versucht habe, funktioniert nicht.

Da mein char * m_Ptr alle Pixeldaten enthält. Ich kann es durchlaufen:

for (int I = 0; I < other.width * other.height; I++) outputStream << other.m_Ptr[I];

Aber dies verursacht aus irgendeinem Grund einen Laufzeitfehler.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage