Ich mache einige Bildverarbeitung auf einige Bilder, die ich aus Datei laden. Ich habe eine Klasse mit Funktionen zum Laden, Ausführen und Speichern. Ich lade und speichere immer im Hauptthread in serieller Reihenfolge, aber ich führe Aufrufe an verschiedenen Bildern durch. Wenn ich den Befehl fädle, schlägt das Speichern fehl, wenn ich das Ausführen nicht ausführe, funktioniert es. Ich lade ein Bild, klon es 3 mal, mache dann Änderungen an diesen und speichere sie alle. Die Dateinamen gespeichert werden, um nicht die gleichen sind wie das Originalbild geladen inSpeichern GDI + Bitmap nach Gewindeoperationen auf es
Dies funktioniert.
ProcessImage process1 = ProcessImage(L"IMG_1");
process1.Load();
process1.Execute();
process1.Save();
Dies gilt nicht:
ProcessImage process1 = ProcessImage(L"IMG_1");
process1.Load();
thread t1(&ProcessImage::Execute, process1);
t1.join();
process1.Save(); //exception
Ausnahme in Bild :: Save GdipSaveImageToFile:
Lesezugriffsverletzung. Dies war 0xCCCCCCCC.
meine Funktion sieht wie folgt speichern:
void Save() {
CLSID pngClsid;
CLSIDFromString(L"{557CF406-1A04-11D3-9A73-0000F81EF32E}", &pngClsid);
destBright->Save(brightenOut.c_str(), &pngClsid); //exception
delete destBright;
//same again on 2 other Bitmaps
}
destBright ist ein privates Mitglied ProcessImage, die ein Zeiger auf eine Bitmap ist.
Danke. Kann bei Bedarf mehr Code bereitstellen.