Wie prüfe ich ob bitmap.lockbits die Bitmap bereits gesperrt hat ?

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    @koning3 Willkommen im Forum. :thumbup:
    Bei korrekter Programmierung ist diese Fragestellung nicht sinnvoll.
    Öffne eine Bitmap in einem Using-Block, locke die Bits, arbeite damit, unlocke die Bits, beende das Using.
    Wenn Du eine gelockte Bitmap in einer Prozedur beraarbeiten willst, übergib nicht die Bitmap, sondern die gelockten Bits als Parameter.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die Hinweise.
    Bisher arbeite ich mit mehreren SUBs für Lock und Unlock, wobei ich mir beim Lock Flags setze, die ich abfrage. Klappt normalerweise problemlos.
    Die Idee mit USING und die Übergabe der Lockbits statt der Bitmap ist super, aber dafür muss ich die Programme erstmal ziemlich umbauen.
    Melde mich später nochmal.
    Es geht auch ohne USING-Blöcke. Ich bleibe bei meinen SUBs für LOCK und UNLOCK, da ich so dynamisch auch mehrere Bitmap sperren und freigeben kann.

    Die Exception mit der Fehlermeldung "Bitmapbereich ist bereits gesperrt" tritt offensichtlich dann auf, wenn man durch einen Fehler in der Indexberechnung versucht, auf Speicherbereiche außerhalb der Lockbits zuzugreifen.
    Der Fehler enstand durch eine abgefangene, aber unbehandelte Overflow-Exception bei der Berechnung einer nicht-proportionalen Bittransfer-Operation zwischen zwei Bitmaps. Ist behoben.

    koning3 schrieb:

    da ich so dynamisch auch mehrere Bitmap sperren und freigeben kann.
    Ich hoffe, Du behältst den Überblick.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich programmiere sehr pragmatisch und ergebnisorientiert. Wenn das Programm tut was es soll, ist es in Ordnung.

    Wahrscheinlich kriegen die Professionellen unter euch das Grausen wenn sie meinen Code sehen würden, aber ich habe schon eine Reihe (für mich) sehr brauchbarer Programme damit realisiern können.
    Mir liegt (als Individualist) nichts an der Ästhetik sauberer OO-Programmierung.

    Aber es ist gut sich auch mal austauschen zu können. Ich freue mich daher über die freundliche Aufnahme im Forum !!

    koning3 schrieb:

    Wahrscheinlich kriegen die Professionellen unter euch das Grausen wenn sie meinen Code sehen
    Genau das befürchte ich.
    Überleg mal, wie es wäre, wenn Du ein wenig Ordnung in Deinen Projekten machst.
    Du kannst ja mal ein kleineres Projekt ohne bin, obj und vs-Ordner gezippt anhängen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Beispielprogramm Qwirkle

    @RodFromGermany
    Hier als Beispiel die Projektmappe für das Programm Qwirkle. Das Spiel ist eigentlich ein bekanntes Brettspiel mit Spielsteinen, kann in dieses Computerversion mit bis zu vier Spielern gespielt werden, wobei jeder Spieler bis auf den Startspieler auch durch den Computer ersetzt werden kann. Ab dem zweiten Zug kann auch dieser den Computer übernehmen lassen. Die Grafiken der Spielsteine werden extern geladen, sind aber nicht beigefügt. Spiel läuft aber auch ohne diese, mit Zahlen auf farbigen Grund. Das Spielfeld kann mit der Maus verschoben und gezoomt werden.

    Die Programmierung (im Urlaub am Laptop) wurde begonnen mit der festen Absicht, mal streng strukturiert zu programmieren. Mit der weiteren Fertigstellung überwog dann der Wunsch das Spiel fertig zu stellen ....
    Bin gespannt auf Deine Vorschläge.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „koning3“ ()

    Die SLN-Datei fehlt, dafür sind überflüssigerweise bin- und obj-Ordner drin, die das Ganze aufblähen … mecker mecker, ich weiß :)

    Uiuiui, das geht ja gut los. Option Strict Off und VB6-Namespace drinne. 8|

    OMG! fast 5000 Zeilen nur in Form1.vb?!? Schau mal vielleicht hier rein: WinForms Projektentwicklung bzgl. der Rolle des Formulars
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    RodFromGermany schrieb:

    ohne bin, obj und vs-Ordner gezippt anhängen.
    Du: 425771 Bytes
    Ich: 48839 Bytes
    ;(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @VaporiZed
    Es kommt sicher auf den Anspruch an.

    Als nicht professioneller Anwender von VB8 freue ich mich, dass die IDE Visual Studio auch ohne Informatikstudium und OOP-Kenntnisse zu recht brauchbaren Ergebnissen führt. Glücklicherweise ist der Compiler hier toleranter als manche.

    Für mich ist VB eine Möglichkeit, den Computer für eigene kreative Ideen zu nutzen ... und nicht auf die Realisierung durch die Software-Profis angewiesen zu sein. Aber ich lerne gerne noch dazu.

    Um weitere Irritationen zu vermeiden, habe ich den Anhang in meinem Beitrag gelöscht.
    Natürlich. Aber mit ähnlichen Projektaufbauten habe ich hier im Forum ebenfalls angefangen. Und dann wurde mir langsam klar, dass noch sehr viel Luft nach oben für mich ist. Auch wenn ich das für mich selbst erst mal nicht wahrhaben wollte. Ich selbst bin auch kein Profi - bin sogar kilometerweise davon entfernt - und ich koche mein eigenes Programmiersüppchen. Es ist keiner an meiner Seite, der mir prüfend über die Schulter schaut, sondern ich bin ein einsamer Programmierer, der nur die Leute an der Backe hat, die täglich meine Tätlichkeiten, die ich mit Code produziere, ausbaden müssen. Will heißen: Die User meiner Programme. Bevor ich hier im Forum aktiv war, dachte ich, ich sei fertig mit Programmieren. Heute weiß ich, dass das eine Aussage ist wie: »Ich bin fertig mit Rasen mähen. Ich muss nie wieder was mit dem Rasen machen.« Und so erweitere ich aus eigenem Ehrgeiz meinen Horizont. Und das seit bisher 6 Jahren hier im Forum.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Das mit der "Luft nachoben" verstehe ich nur zu gut. Deswegen bin ich ja hier im Forum.
    Trotz aller Programmier-Erfolge beschleicht mich des öfteren die Ahnung, dass es eleganter und effizienter gehen könnte.

    Progarmmieren macht einsam. Kenne ich. In Männerrunden so sexy, als ob ich von einem Häkelkurs erzählen würde. Trotzdem lässt mich die Faszination, etwas völlig Neues zu erschaffen nicht los. Die Software-Architektur (z.B. OOP) zu erfüllen kann aber nicht der Zweck sein. Was für mich zählt sind die Ergebnisse, egal wie entstanden, die das tun, was ich erwarte.

    Damit wir uns verstehen: Ich lerne gerne dazu, aber ich muss den Nutzen einsehen.

    koning3 schrieb:

    Next time.
    Nö.
    Du kannst Deinen Post editieren und einen besseren Anhang posten.
    Solche "Müll"-Dateien belasten den Forums-Server ungemein.

    koning3 schrieb:

    Trotz aller Programmier-Erfolge beschleicht mich des öfteren die Ahnung, dass es eleganter und effizienter gehen könnte.
    Versuche Dir vorzustellen, wie es in einem halben oder einem Jahr ist, wenn Du merkst, dass in Deinem Programm noch ein Feature fehlt.
    Wie lange brauchst Du, um Dich wieder einzuarbeiten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    koning3 schrieb:

    Ich lerne gerne dazu, aber ich muss den Nutzen einsehen.
    Verständlich. Wenn das Dein einziges Programm ist und es so läuft, wie Du willst, weil es fertig ist, wird das auch ein Ding der Unmöglichkeit sein, da jetzt Änderungen vorzunehmen bzw. vornehmen zu wollen, die jemand Dir vorschlägt. Bei mir kam die Überzeugung, dass ich was ändern muss, dadurch, dass ich das ein oder andere Problem … naja, zwar "gelöst" hatte. Aber so richtig war ich damit nicht ganz zufrieden. Immer, wenn ich bei einem anderen Programm vor dem gleichen oder ähnlichen Problem stand, dachte ich mir: Ok, jetzt wieder diese ganze Litanei. Bis ich dann hier bessere Wege kennenlernte. Kürzere. Effizientere. Weniger fehleränfällige.
    Frag Dich und sag uns, bei welchem Problem Du Dir immer wieder Gedanken machst, ob das besser geht, weil es Dich nervt, wenn Du damit zu tun hast (z.B. Daten speichern oder auch allgemeine Dinge wie Übersicht behalten*) und wir finden hier ggf. "standardisierte" Alternativen.

    * das war mit mein größtes Problem: Wenn irgendwo ein Fehler war oder ich was ändern musste, dachte ich mir: 'Jaaa, das müsste irgendwo hier sein. Glaub ich. Oder doch nicht? Hmmm …' Die passende(n) Codestelle(n) zu suchen war immer ein Graus.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Mein Projektordner umfasst z.Z. mehr als 60 Projekte, etwa 20 davon sind aktuelle Programme recht unterschiedlicher Größe. Der grundsätzliche Aufbau ist immer sehr ähnlich. Wo immer es geht verwende ich gleiche Variablennamen für gleiche Verwendungen greife auf globale Variablen nur über Parameter (und das meistens durch Überladungen) zu. Bei neuen Projekten kopiere ich die häufigst gebrauchten SUBs und Functions einfach per cut&paste dazu. So gesehen bin ich bei Änderungen und Programmerweiterungen relativ schnell wieder "drin". Für viele Spezialfälle wie Lockbits oder Hotkeys habe ich Lösungen gefunden, die ich in gleicher Form immer wieder verwenden kann.

    Da viele Verarbeitungsschritte zu komplex für den Foreground sind, verwende ich sehr oft den Backgroundworker. Um Ressourcen-Kollisionen zu vermeiden, verwende ich den BGW in einer eigenen, standardisierten Infrastruktur streng seriell mit Hilfe einer kleinen Requestqueue (Collection plus Scheduler (Timer)). Trotzdem kommt es manchmal zu einer Exception ("Objekt wird bereits an anderer Stelle verwendet"), was ärgerlich ist. Die Online-Hilfe schlägt zur Fehlervermeidung die Verwendung der HDC-Get/Release-Funktion vor, die ich aber noch nicht verstanden habe. Gibt es hierzu Infos im Forum?