Avatar billede bernhof Nybegynder
20. november 2002 - 20:43 Der er 8 kommentarer og
2 løsninger

Hente RGB værdier fra farve

Jeg vil gerne kunne hente R, G og B ud af en farve, også når farven er negativ - fx -2147483633 (Form1.BackColor).

Er der nogen der kan klare det for mig?

-Mikkel
Avatar billede joern Nybegynder
20. november 2002 - 22:52 #1
Hej.

Jeg kender ikke til negative farver.  Kan kun oplyse (hvad du sikkert ved) at du kan benytte at angive rgb(255,255,255) = hvid  rgb(0,0,0) = sort

M.v.h.  Jørn
Avatar billede bernhof Nybegynder
20. november 2002 - 23:15 #2
Hvis jeg udskriver Form1.BackColor får jeg vist et negativt tal ...

Og jeg skal kunne gå den anden vej, altså fra sort til R = 0, G = 0, B = 0.
Avatar billede rynke10 Novice
20. november 2002 - 23:17 #3
Hej. Den er lidt slem. De alm farver som du selv kan definere er ganske rigtigt RGB hvor værdien for Form1.BackColor er 00RRBBGG i HEX. Sort er 00000000 og hvid 00FFFFFF.
Er værdien negativ, drejer det sig om en systemfarve. Altså standard farve for vinduesramme baggrund eller lign.
Det går bare efter listen:
Scrollbar -2147483640  svarende til 80000000 HEX
Desktop  -2147483641  svarende til 80000001 HEX

o.s.v. prøv selv at ændre farverne, så kan du vælge palette eller system farver.
Avatar billede rynke10 Novice
20. november 2002 - 23:21 #4
2147483633 (8000000F i HEX) svarer så til farven på din knap, altså buttonface. Hvilken farve den har er så ikke bestemt af dit program.
Avatar billede rynke10 Novice
20. november 2002 - 23:23 #5
Ups
Scrollbar -2147483648  svarende til 80000000 HEX
Desktop  -2147483647  svarende til 80000001 HEX

Skulle det være
Avatar billede kabbak Professor
20. november 2002 - 23:54 #6
Backcolor = 4966415                   
Blå = (Backcolor/256)/256  resultat 75                   
Grøn = (Backcolor/256) - (Blå værdi*256) resultat 200           
Rød =Backcolor -(Grøn værdi*256)+((Blå værdi*256)*256) resultat 15   

I regnearket har jeg sat den til heltal, ellers kommer der decimaler
Avatar billede bernhof Nybegynder
21. november 2002 - 00:05 #7
Ok, det forstår jeg .. Kan man på nogen måde konvertere disse systemfarver til normale farver? Evt med et API-kald el. lign.?
Avatar billede bernhof Nybegynder
21. november 2002 - 00:06 #8
kabbak > den skal også kunne klare de negative tal - altså systemfarver..
Avatar billede bernhof Nybegynder
21. november 2002 - 00:48 #9
Fandt selv ud af det:

Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long

'Color conversion : from long to rgb
Public Sub CRGB(ByVal Color As Long, R As Integer, G As Integer, B As Integer)
   
    If Color < 0 Then
        Dim FirstIndex As Long
        FirstIndex = &H80000000
        Color = GetSysColor(Abs(Color - FirstIndex))
    End If
   
    Dim L As Long
   
    Color = Abs(Color)
   
    L = Int(Color / 256)
    R = Color - L * 256
    Color = Int(Color / 256)
   
    L = Int(Color / 256)
    G = Color - L * 256
    Color = Int(Color / 256)
   
    L = Int(Color / 256)
    B = Color - L * 256
End Sub

Men rynke10 skal have tak for hjælpen - 15 af de 30 point går til dig! resten tager jeg selv :o)

- Mikkel
Avatar billede bernhof Nybegynder
24. november 2002 - 02:20 #10
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester