-
- VBForums
- Visual Basic
- Visual Basic 6 and Earlier
- how to find the Red, Green Blue ( RGB()) value of a color?
-
Jul 6th, 2000,02:02 PM #1 Thread Starter Addicted Member Hi, How can I extract the value of Red, Green and Blue that composes an specific color? Example: Suppose the variable vColor stores the color below: vColor = &H80000014 How can I find the value of Red, Green and Blue that I should use in RGB(999,999,999) to produce the same color? Thanks Michel Jr. -
Jul 6th, 2000,04:39 PM #2 Code: 'Very useful code to convert long to rgb, rgb to long, rgb to hex and qbcolor to rgb Public Red As Integer Public Green As Integer Public Blue As Integer Public Sub ConvertQBColorToRGB(QBColorValue As Integer) If QBColorValue < 0 Or QBColorValue > 15 Then MsgBox "There's error in your QBColor.", vbCritical, "Error" ConvertLongToRGB (QBColor(QBColorValue)) End Sub Public Function ConvertRGBToHex(RedColor As Integer, GreenColor As Integer, BlueColor As Integer) On Error GoTo ErrorInLongColor ConvertRGBToHex = Right(0 & Hex(RedColor), 2) & Right(0 & Hex(GreenColor), 2) & Right(0 & Hex(BlueColor), 2) Exit Function ErrorInLongColor: MsgBox "There's error in your RGB color.", vbCritical, "Error" End Function Public Sub ConvertLongToRGB(Color As Long) On Error GoTo ErrorInLongColor Blue = Color \ 65536 Green = (Color - Blue * 65536) \ 256 Red = Color - (Blue * 65536) - (Green * 256) Exit Sub ErrorInLongColor: MsgBox "There's error in your long color.", vbCritical, "Error" End Sub Public Function ConvertRGBToLong(RedColor As Integer, GreenColor As Integer, BlueColor As Integer) On Error GoTo ErrorInLongColor ConvertRGBToLong = RGB(RedColor, GreenColor, BlueColor) Exit Function ErrorInLongColor: MsgBox "There's error in your RGB color.", vbCritical, "Error" End Function -
Jul 6th, 2000,04:59 PM #3 Hyperactive Member Cheeky method... OK, not chheky exactly, but a bit different to Matthew's and with no error checking etc! in a module, declare the following Code: Public Type MyRGBColor Red As Byte green As Byte blue As Byte End Type Public Type MyColor RGB As Long End Type Now, in any code where you want to "convert" from an RGB color to Long or vice versa, just do the following: Code: ' RGB to Long Dim mycol As MyColor Dim rgbcol As MyRGBColor rgbcol.red = 200 rgbcol.green = 30 rgbcol.blue = 220 lset mycol = rgbcol debug.print mycol.rgb ' Long to RGB Dim mycol As MyColor Dim rgbcol As MyRGBColor mycol.rgb = 14425800 lset rgbcol = mycol debug.print "Use RGB(" & rgbcol.red & "," & rgbcol.green & "," & rgbcol.blue & ")" Of course, you could easily make error checking conversion functions to handle this for you, but this method is relying on the lset command to "convert" for us. Nice eh? Paul Lewis -
Jul 8th, 2000,01:22 PM #4 I found a better code . Code: Public Enum RGBColor gcRed = 1 gcBlue = 2 gcGreen = 3 End Enum Public Function GetRGBColor(ByVal Color As String, ColorPart As RGBColor) As Long Dim strColor As String Select Case ColorPart Case gcRed strColor = Right$("000000" & Hex$(Color), 6) GetRGBColor = Val("&h" & Right$(strColor, 2)) Case gcBlue strColor = Right$("000000" & Hex$(Color), 6) GetRGBColor = Val("&h" & Left$(strColor, 2)) Case gcGreen strColor = Right$("000000" & Hex$(Color), 6) GetRGBColor = Val("&h" & Mid$(strColor, 3, 2)) End Select End Function -
Jul 8th, 2000,01:41 PM #5 Seems like you guys like to make it look complicated Code: Red=Color mod 256 Green=int(Color/256) mod 256 Blue=int(Color/&H10000) Use writing software in C++ is like driving rivets into steel beam with a toothpick. writing haskell makes your life easier: reverse (p (6*9)) where p x|x==0=""|True=chr (48+z): p y where (y,z)=divMod x 13 To throw away OOP for low level languages is myopia, to keep OOP is hyperopia. To throw away OOP for a high level language is insight. -
Feb 2nd, 2019,10:18 AM #6 Hyperactive Member Re: Seems like you guys like to make it look complicated Originally Posted by kedaman Code: Red=Color mod 256 Green=int(Color/256) mod 256 Blue=int(Color/&H10000) OK that's genius. Thanks very much. Helped me with a control that uses 3 stupid RGB numbers rather than Hex. -
Feb 2nd, 2019,10:29 AM #7 Re: how to find the Red, Green Blue ( RGB()) value of a color? Darkbob, replying to a 2-decade old thread Anyway, this is better because it doesn't use the Mod() operator or Int() or non-integer division. It's more efficient/faster Code: Red = (Color And &HFF&) ' take lower byte Green = (Color And &HFF00&) \ &H100& ' shift next byte to lower & take that Blue = (Color And &HFF0000) \ &H10000 ' shift next byte to lower & take that When you print out a color in hex, keeping 6-8 characters, and then look at above code, you can see how simple the formula really is Edited: No offense towards kedaman (posted the code), that is probably the worst/slowest way to get the individual RGB values. Why? Using doubles throughout the formula (due to calculations) & doubles are slower than longs. Bitshifting is among the quickest operations as shown in my example. Additionally, and this doesn't apply with all applications, kedaman's formula fails miserably if an alpha byte above 127 exists in the color, i.e., this value for vbGreen with 100% opacity: &HFF00FF00 Last edited by LaVolpe; Feb 2nd, 2019 at 10:44 AM. -
- VBForums
- Visual Basic
- Visual Basic 6 and Earlier
- how to find the Red, Green Blue ( RGB()) value of a color?
Posting Permissions - You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
- BB code is On
- Smilies are On
- [IMG] code is On
- [VIDEO] code is On
- HTML code is Off
Forum Rules | Click Here to Expand Forum to Full Width |
0 Response to "Vbnet Convert Color to Red Green and Blue"
Post a Comment