Hogyan kérjem le a képernyő színeit Visual Basic -ben?
Visual Basic programnyelvben, hogyan tudom lekérni a képernyő színeit?
(Egyenlőre tanulgatom a nyelvet és gondoltam csinálok egy monitor RGB háttérvilágítást, de ehhez szükségem lenne az egész képernyő szinére átlagban*.)
Arra gondoltam, hogy csinálok egy screenshot (Bitmap) -ot, majd "összegyűjtöm" minden 10. pixel színét (RGB) majd valahogy csinálok egy "átlag számítást".
Azt, hogy hogy "számítok átlagot" nem tudom és abban sem vagyok biztos, hogy amit eddig csináltam jól csináltam.
Ha esetleg valaki tudna küldeni működő kódót, azt nagyon megköszönném, de bármiféle segítségért hálás vagyok.
Amivel próbálkoztam:
Bitmap:
---------------------------------------------------------
Private Function Screenshot() As Bitmap
Dim b As Bitmap = New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
Using g As Graphics = Graphics.FromImage(b)
g.CopyFromScreen(0, 0, 0, 0, b.Size, CopyPixelOperation.SourceCopy)
g.Save()
End Using
Return b
End Function
---------------------------------------------------------
RGB:
---------------------------------------------------------
Private Structure RGB
Public Property R As Integer
Public Property G As Integer
Public Property B As Integer
End Structure
Private Function GetAllRGB(ByVal img As Bitmap) As RGB()
Dim rgbCollection As List(Of RGB) = New List(Of RGB)
For x As Integer = 0 To img.Width
For y As Integer = 0 To img.Height
Dim pixelColor As Color = img.GetPixel(x, y)
Dim pixelRGB As RGB = New RGB With {.R = pixelColor.R, .G = pixelColor.G, .B = pixelColor.B}
rgbCollection.Add(pixelRGB)
Next
Next
Return rgbCollection.ToArray()
End Function
---------------------------------------------------------
GetAllRGB(Screenshot)
Külön kell átlagolnod az R, G és a B összetevőket.
Ehhez felesleges kigyűjtened külön az összes értéket, elég ha folyamatosan összeadod és a végén osztod el, vagy ha így túl nagy értékeket kapnál és nem fér el az integerben, akkor soronként is átlagolhatod, majd ezt adogatod össze. A végén meg osztod.
Egyébként igaza van az előzőnek, valószínűleg egymáshoz nagyon hasonló értékeket fogsz kapni az R, G és B összetevőkre, az eredmény meg egy szürkéhez hasonló szín lesz. Ez ellen azt csinálnám, hogy a legintenzívebb összetevőt felerősíteném, a leggyengébbet meg tovább gyengíteném. De lehet vele utána kísérletezgetni, hogy milyen kompenzációval érsz el legszebb eredményt.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!