Lecture/Écriture de PPM Fichier Image de C++

Essayer de lire et d'écrire à partir d'un PPM de fichier Image (.ppm) dans la seule façon que je sais comment:

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

Mes valeurs correspondent à la taille réelle du fichier. J'ai donc allègrement tentative d'écrire les données:

std::ostream& operator <<(std::ostream &outputStream, const PPMObject &other)
{
    outputStream << "P6"     << " "
        << other.width       << " "
        << other.height      << " "
        << other.maxColVal   << " "
       ;

    outputStream << other.m_Ptr;

    return outputStream;
}

Je fais assurez-vous d'ouvrir le fichier en utilisant std::ios::binary pour la lecture et l'écriture:

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

Erreur De Logique:

Je ne suis qu'un écrit une partie de l'image. Il n'y a pas de problème avec l'en-tête ou d'ouvrir le fichier manuellement.

Publique de la classe des variables membres:

La m_Ptr variable de membre de est un char * et la hauteur, la largeur maxColrVal sont tous les nombres entiers.

Tentative De Solution:

À l'aide de inputStream.lire et outputStream.écrire pour lire et écrire des données, mais je ne sais pas comment et ce que j'ai essayé ne fonctionne pas.

Depuis mon char * m_Ptr contient toutes les données de pixels. Je peut itérer dessus:

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

Mais cela provoque une erreur d'exécution pour une raison quelconque..

OriginalL'auteur user4640007 | 2015-03-06