eigene C++ DLL im Projekt anwenden

  • VB.NET

Es gibt 44 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonger96.

    n1nja schrieb:

    Meine Frage war ja letztendlich "nur" C++, bessere Performance?! Danke euch bisher sehr:)
    Und meine Antwort ist: Die Frage ist falsch gestellt.
    Bessere Performance ergibt sich nicht aus C++, sondern aus dem Benutzen von Alternativen zu Graphics.GetPixel.

    Ok und wie macht man es dann?!
    Tja, das Problem ist, ich kann nur auf ein sehr ausgefeiltes Sample verweisen, was dementsprechend anspruchsvoll geproggt ist:
    Convolution-Filter sind ein paar Übungen zur Bildverarbeitung, und darin gibts eine Klasse PixelHelper, die die PixelDaten einer Bitmap als 2D-Array von Bytes verfügbar macht.
    Deshalb sind die dort vorgestellten BildFilter sehr sehr flott (man könnte noch bischen rausholen, aber phh!)
    Wie gesagt: PixelHelper ist des Pudels Kern, wenns dir gelingt, den auf deine Bitmapse anzuwenden, dass sollte die Performance mindestens verhundertfachen.

    Noch kurz zur Funktionsweise der PixelHelpers:
    1) du übergibst ihm eine Bitmap, und kriegst das Byte-Array mit den Pixel-Daten zurück (ReadPixels). Daraus kannst du das Bild auslesen.
    2) Du kannst bei Bedarf mit .CreateWritePixels dir ein zweites Array geben lassen, in dass du Byte-Werte reinschreiben kannst, und so quasi ein neues Bild aufbauen.
    3) Mit CreateResultBitmap wird das WritePixels-Array in eine ordentliche Bitmap verwandelt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    OK danke dir.

    Ich hab mir jetzt mal Testweiße ein Projekt erstellt und die ReadPixel-Funktion angewendet.

    Die Daten hab ich erfolgreich auslesen können.
    Jetzt komm ich aber mit den Byte-Array nicht weiter.

    Zumindest weiß ich nicht, wie es eingeteilt ist:)

    In den Byte-Array steht jetzt folgenendes:

    0,0 = 89
    0,1 = 36
    0,2 = 23
    0,3 = 255

    Kann ich davon ausgehen, das immer ein Block von 4 Zahlen die ARGB-Werte sind und vorne dran die Pixel, also X,Y ??
    Aber dürfte ja nicht passen, da man ja pro Pixel 4 Werte hat.
    das ist je nachdem, beachte das PixelFormat der Bitmap.
    Bei System.Drawing.Imaging.PixelFormat.Format24bppRgb ist ein Pixel nur durch 3 Bytes dargestellt, bei System.Drawing.Imaging.PixelFormat.Format32bppArgb ists ein Byte mehr für den Alpha-Kanal.

    n1nja schrieb:

    Zumindest weiß ich nicht, wie es eingeteilt ist:)
    naja, wenn du meine Sample-Solution genau studierst, die Bildverarbeitung dort bearbeitet doch jeden Farb-Kanal einzeln.

    Oder anners: gugge nochma PixelFormat.Format32bppArgb: Das ist lang ausgesprochen: 32 Bit Per Pixel, A R G B - da kann eiglich keine Frage offen bleiben ;)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich schau jetzt scho 2 Std am PC und blick nix mehr.
    Ich komm mit den Bytes einfach nicht klar im Mom.

    Ich muss ja die Bytes bzw die Farbwerte rausfiltern und vergleichen, sodass die Lichtreflexe bei den Cams nicht berücksichtig werden:)