HEXA do DECI konverze barev   zodpovězená otázka

VB.NET

Zdravím,

pomůžete mi někdo sestavit zdroják co by konverzoval Hexa kód barev do decimálního?

Private Sub HexaToDeci(ByVal Hexa As String)
    ???
    Dim ARGB() As Integer = {255, ?, ?, ?}
    Return ARGB()
End Sub

Děkuji

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý večer,

nemám tu teď Visual Studio, takže to budu psát z hlavy, tak to snad napíšu dobře:

Private Function HexaToDeci(ByVal Hexa As String) As Byte()
	Dim ARGB() As Byte = { 255, _
	CByte("&H" & Hexa.SubString(0,2)), _
	CByte("&H" & Hexa.SubString(2,2)), _
	CByte("&H" & Hexa.SubString(4,2)) }
End Function

Pokud chcete mít tuto funkci opravdu správnou, tak by bylo ještě dobré ošetřit odstřižení prvního znaku, pokud bude barva začínat # (#FF3099 -> FF3099) a případné zdvojení znaků, pokud bude barva v krátkém formátu (2F0 -> 22FF00):

Private Function HexaToDeci(ByVal Hexa As String) As Byte()
	If Hexa.StartsWith("#") Then Hexa = Hexa.SubString(1)
	If Hexa.Lenght = 3 Then
		Hexa = Hexa.SubString(0,1) & Hexa.SubString(0,1) & Hexa.SubString(1,1) & Hexa.SubString(1,1) & Hexa.SubString(2,1) & Hexa.SubString(2,1)
	End If

	Dim ARGB() As Byte = { 255, _
	CByte("&H" & Hexa.SubString(0,2)), _
	CByte("&H" & Hexa.SubString(2,2)), _
	CByte("&H" & Hexa.SubString(4,2)) }
End Function

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

Nevím, je-li to to, co hledáte, ale třeba mne napadlo:


Dim ARGB() as integer
ARGB = {255, convert.toint32(Hexa.substring(0,2),16), _
        convert.toint32(Hexa.substring(2,2),16), _
        convert.toint32(hexa.substring(4,2),16)}


nezkoušel jsem to sice (možná jsem tam nasázel nějaké chybky), ale spíše princip převodu z toho patrný je (ten mi chodí).

Samozřejmě je nutné ošetřit správnost formátu zadaného hexa-textu, dále záleží na formátu vstupu - uvedené by platilo pro zadání třeba FFFFFF, pokud tam budete mít ještě alfakanál, případně návěští jak se používá pro odlišení formátu (myslím něco jako 0xFFFFFF atd), je nutno příslušně posunout jednotlivé "substringy".

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

Uzavřel bych toto téma s tím, že .NET framework má pro tento převod již funkcionalitu vepsanou. Stačí tedy jednoduchý kód:

Dim c As Color = System.Drawing.ColorTranslator.FromHtml("#FF0000")
MsgBox(c.R & " " & c.G & " " & c.B)

c.R je červená složka, c.G je zelená a c.B je modrá.

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

Děkuji za užitečné odpovědi.

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

Ještě malé doplnění. Při převodu z kódování VB6 se hodí funkce:

  Private Function HexaToDeci2(ByVal Hexa As String) As Color
      ' Hexa musí mít prefix &H  např. &HFF0080 
      ' funkce vrací barvu "Color [A=255, R=128, G=0, B=255]"
      Return System.Drawing.ColorTranslator.FromOle(Hexa)
  End Function

A pozor na řazení barev, je BGR - z příkladu &HFF0080 je R=128, G=0 a B=255, ale v funkce z předchzích příspěvků vrátí {255, 255, 0, 128}, tedy v řazení RGB

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jak se na to teď koukám, tohle bude také pro .NET, Visual Basic 6 nemá typ Color a nemá ani System.Drawing.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Samozřejmě. Jedná se o převod do formátu .NET

Ve VB6 máte mj. konstanty:

Constant Value Description

vbBlack &H0 Black

vbRed &HFF Red

vbGreen &HFF00 Green

vbYellow &HFFFF Yellow

vbBlue &HFF0000 Blue

vbMagenta &HFF00FF Magenta

vbCyan &HFFFF00 Cyan

vbWhite &HFFFFFF White

Uvedená funkce třeba na &HFF00FF (Magenta) vrátí:

Color [Fuchsia] , tj. "{Name=Fuchsia, ARGB=(255, 255, 0, 255)}"

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