Laden...

Allgemeiner Fehler in GDI+ bei Bitmap.SetPixel. Manchmal gehts...

Erstellt von timbu42 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.834 Views
T
timbu42 Themenstarter:in
31 Beiträge seit 2017
vor 4 Jahren
Allgemeiner Fehler in GDI+ bei Bitmap.SetPixel. Manchmal gehts...

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

6.911 Beiträge seit 2009
vor 4 Jahren

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!"

T
timbu42 Themenstarter:in
31 Beiträge seit 2017
vor 4 Jahren

Super, Danke! Das hilft!