myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grafik und Sound » Allgemeiner Fehler in GDI+ bei Bitmap.SetPixel. Manchmal gehts...
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
timbu42
myCSharp.de-Mitglied

Dabei seit: 10.10.2017
Beiträge: 25


timbu42 ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
    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
06.10.2019 18:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.594
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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ü
06.10.2019 19:17 Beiträge des Benutzers | zu Buddylist hinzufügen
timbu42
myCSharp.de-Mitglied

Dabei seit: 10.10.2017
Beiträge: 25

Themenstarter Thema begonnen von timbu42

timbu42 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Super, Danke! Das hilft!
06.10.2019 21:00 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.10.2019 08:41