Nein, es ist Geschichte. GDI + wurde schon eine ganze Weile geschrieben, bevor .NET überhaupt auf den Markt kam. Der SDK-Wrapper dafür wurde in C++ geschrieben. Ausnahmen sind in C++ zweifelhaft, nicht jeder kauft sie ein. Google nicht zum Beispiel. Um es kompatibel zu halten, meldet es Probleme mit Fehlercodes.Das skaliert einfach nie, Bibliotheks-Programmierer machen es sich zur Aufgabe, die Anzahl der möglichen Fehlercodes bewusst zu begrenzen, um die Belastung des Client-Programmierers zu reduzieren.
GDI + hat dieses Problem in Pik, es definiert nur 20 Fehlercodes. Das ist nicht viel für so ein großes Stück Code mit so vielen externen Abhängigkeiten. Was an sich schon ein Problem ist, gibt es eine Vielzahl von Möglichkeiten, eine Image-Datei zu vermasseln. Keinesfalls kann die Fehlerberichterstattung einer Bibliothek so feinkörnig sein, dass sie alle abdeckt. Die Tatsache, dass diese Fehlercodes lange vor der Verwendung von Standard-Ausnahme-abgeleiteten Typen von .NET ausgewählt wurden, half sicherlich nicht.
Der Status :: OutOfMemory Fehlercode wurde überladen, um verschiedene Dinge zu bedeuten. Manchmal bedeutet es wirklich nicht genügend Arbeitsspeicher, es kann nicht genügend Speicherplatz zum Speichern der Bitmap-Bits reservieren. Leider wird ein Problem mit dem Bilddateiformat mit demselben Fehlercode gemeldet. Die Reibung ist hier, dass es unmöglich entscheiden kann, ob die Breite * Höhe * Pixel, die es aus der Bilddatei liest, ein Problem ist, da nicht genügend Speicher für die Bitmap verfügbar ist. Oder wenn die Daten in der Bilddatei Junk sind. Es wird angenommen, dass die Image-Datei kein Junk ist, fairer Aufruf, das ist ein anderes Programmproblem. So OOM ist, was es berichtet.
Für Vollständigkeit, das sind die Fehlercodes:
enum Status
{
Ok = 0,
GenericError = 1,
InvalidParameter = 2,
OutOfMemory = 3,
ObjectBusy = 4,
InsufficientBuffer = 5,
NotImplemented = 6,
Win32Error = 7,
WrongState = 8,
Aborted = 9,
FileNotFound = 10,
ValueOverflow = 11,
AccessDenied = 12,
UnknownImageFormat = 13,
FontFamilyNotFound = 14,
FontStyleNotFound = 15,
NotTrueTypeFont = 16,
UnsupportedGdiplusVersion = 17,
GdiplusNotInitialized = 18,
PropertyNotFound = 19,
PropertyNotSupported = 20,
#if (GDIPVER >= 0x0110)
ProfileNotFound = 21,
#endif //(GDIPVER >= 0x0110)
};
Fast * alle * dieser wäre eine bessere Wahl gewesen als 'OutOfMemory', auch' GenericError'. – MusiGenesis
Insbesondere das 'Unknown ImageFormat' scheint für ein Format geeignet zu sein, das nicht verstanden werden kann. –