Hallo liebe Helfer,
ich habe eine Anwendung, in der ich oft die SetPixel-Methode einer Bitmap aufrufe.
Irgendwann bleibt er immer mit der wenig hilfreichen Exception (Allgemeiner Fehler in GDI+) hängen.
Das Merkwürdige ist: mit dem folgenden Workaround funktioniert es irgendwann:
bool gemacht = false;
while (!gemacht)
{
try
{
bitmap.SetPixel(x, y, color);
gemacht = true;
}
catch (Exception exc)
{
}
}
Mir ist völlig klar, dass das natürlich extrem schlechter Stil ist (und super langsam), aber wie kann es sein, dass SetPixel eine Exception gibt und dann sag ich dem PC "Mach es doch solange bis es klappt" und irgendwann geht es tatsächlich?
Ist es überhaupt sinnvoll, die Bitmap-Klasse so zu verwenden? Ich "male" viele Bilder aus Einzelpixeln, deren Lage und Farbe ich durch einen Algorithmus bestimme, um daraus dann Videos zu erstellen. Gibt es einen besseren Weg? DirectX oder so? Es muss nicht auf dem Bildschirm angezeigt werden (nur das fertige Video später, aber das hat dann ja mit Visual Studio nix mehr zu tun).
Freue mich über Antworten,
Tim
Hallo timbu42,
warum dieser super Fehler kommt, kann ich nicht sage.
Aber SetPixel
ist ohnehin nicht das Wahre, schau dir z.B. GetPixel und SetPixel um Längen geschlagen. 800 mal schneller an. Konkret gehts dort darum die Bitmap zu sperren (lock bits) um dann direkt auf den Daten zu arbeiten, anstatt wie bei SetPixel
jedesmal via P/Invoke ins GDI+ aufzurufen (daher ist es so langsam).
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"