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

Schreibe einen Kommentar