Jak zjistit barvu pixelu na obrazovce ?   zodpovězená otázka

VB.NET

Chtěl bych se zeptat, jestli je možné zjistit barvu pixelu na obrazovce.. našel jsem metodu GetPixel, ale ta potřebuje předat HDc, a to už mi nefunguje.. :(

asi takhle vypada nefunkční kód (ja vim že je k ničemu, ale ať to je kompletní) :

Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, _
    ByVal x As Long, ByVal y As Long) As Long

Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        If GetPixel(Me.hdc, e.X, e.Y) = Color.Black Then
            cerna += 1
        End If
    End Sub

Mel by kdyz klikneme na cernou, tak se zvysi pormenna cerna

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud to je ve Visual Basic .NET, pravděpodobně zavolání této API funkce zavolá chybu. Ve Visual Basic 6, kde se tyto funkce používaly téměř všude, totiž datový typ Long zabere v paměti 4 bajty (32 bitů), kdežto v .NETu má velikost 8 bajtů (64 bitů). Pokud tedy používáš API funkce ve VB.NET, v deklaraci změňte všechny proměnné typu Long na proměnné typu Integer. Jinak se při zavolání objeví chyba. Pokud to je navíc ukazatel, je ještě lepší použít datový typ IntPtr, který je pro to přímo určen.

Protože máš proceduru Form1_MouseDown, usuzuji, že ti stačí sledovat pixely v rámci okna, resp. na daném objektu typu Graphics. Kód bude vypadat třeba takto:

    Declare Function GetPixel Lib "gdi32" (ByVal hdc As IntPtr, ByVal x As Integer, ByVal y As Integer) As Integer

    Function GetSysColor(ByVal c As Color) As Integer
        Return c.R + c.G * 256 + c.B * 65536
    End Function

    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        Dim hDC As IntPtr = Me.CreateGraphics.GetHdc()
        If GetPixel(hDC, e.X, e.Y) = GetSysColor(Color.LimeGreen) Then 
            cerna += 1
        End If
    End Sub

A ještě jedna věc - funkce GetPixel nevrací hodnotu typu Color, která se používá pro barvy, ale číslo Integer, které barvu identifikuje. Proto je v ukázce ještě funkce GetSysColor, která barvu z .NETu převede na kód barvy, který používá Windows. Před porovnáváním tedy musíš .NETovou barvu prohnat touto funkcí a porovnávat ji s výsledkem GetPixel.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback