"Helligkeit" eines bestimmten Bereichs des Bildschirms auslesen

  • VB.NET

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

    "Helligkeit" eines bestimmten Bereichs des Bildschirms auslesen

    Hallo,

    ich hoffe ich bin hier richtig...

    Wie würdet ihr folgendes umsetzen:
    Es soll ein Bereich des Bildschirms ausgelesen werden, die Helligkeit jedes Pixels dann zu einer Durchschnittshelligkeit aller Pixel des Bereichs umgerechnet werden, und diese zB. auf einer Skala von 1-10 ausgegeben werden.

    Also wenn der Bereich ganz weiß/hell ist wird eine 10 ausgegeben,
    wenn der Bereich ganz schwarz/dunkel ist wird eine 0 ausgegeben.

    Wo würdet ihr da am besten ansetzen?

    Vielen Dank!
    @whatever 2 Probleme auf ein Mal:
    - Auslesen eines bestimmten Bereiches des Bildschirms,
    - Berechnung Deiner Werte.
    Ich gehe davon aus, dass das Problem 1 gelöst ist.
    Zu Problem 2 musst Du noch definieren, was passieren soll, wenn der Bereich z.B. vollständig rot oder grün oder kunterbunt ist.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Danke erstmal :)
    Das erste Problem habe ich leider noch nicht vollständig gelöst. Einen kleinen Screenshot aufzunehmen und zu speichern kommt eigentlich nicht in Frage...

    Könnte man das zweite Problem nicht lösen wenn man die "Durchschnittsfarbe" in eimen RGB Code vorliegen hat?
    Da könnte man ja relativ leicht definieren welche RGB-Ranges, welche Farben bedeuten...

    Lösungsidee:
    Die einzelnen Pixel des Bereichst durchlaufen und je Pixel den RGB Wert auslesen. Dann den Mittelwert aller Pixel-RGBs bilden...

    Wie könnte man also den RGB-Code eines Pixels ermitteln?

    Bitte keine Vollzitate! Editiert. ~fufu

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „fufu“ ()

    du willst vlt. eher den Farbwert als HSL, damit du die Brightness auslesen kannst:
    docs.microsoft.com/en-us/dotne…s?view=netframework-4.7.2
    Um irgendeine Art von "Screenshot" wirste nicht drumherum kommen und da hängt es auch davon ab, ob es sich um GPU-accelerated zeug handelt oder nicht(Games z.b. oder normale WinForms anwendung)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke dir auch!

    Habe es jetzt erstmal per RGB gemacht und die aktuelle Mausposition (inkl. Helligkeit des jeweiligen Pixels) gemessen.

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. Dim BMP As New Drawing.Bitmap(1, 1)
    3. Dim GFX As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(BMP)
    4. GFX.CopyFromScreen(New Drawing.Point(MousePosition.X * 2, MousePosition.Y * 2),
    5. New Drawing.Point(0, 0), BMP.Size)
    6. Dim Pixel As Drawing.Color = BMP.GetPixel(0, 0)
    7. cPanel.BackColor = Pixel
    8. Redtxt.Text = Pixel.R
    9. Greentxt.Text = Pixel.G
    10. Bluetxt.Text = Pixel.B
    11. End Sub


    Die Helligkeit könnte man so errechnen, indem man die 3 RGB Farben zusammenrechnet und dann mit einem Durchschnitt vergleicht.

    whatever schrieb:

    indem man die 3 RGB Farben zusammenrechnet
    Du solltest Dich hier etwas präziser ausdrücken.
    Per

    VB.NET-Quellcode

    1. Dim gray As Integer = CInt(col.R) + CInt(col.G) + CInt(col.B)
    bekommst Du den Grauwert der Farbe und mit dem kannst Du schon mal ne Menge anfangen.
    Die Konvertierungen nach Integer sorgen dafür, dass es keinen Byte-Overflow gibt.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!