Login Register
Frontpage Code library Pastebin

HEXColor()

Author: Jare
Added: 5.4.2013 10:28
Edited: 5.4.2013 10:28
Category: Grafiikka

Description

Asettaa piirtovärin heksakoodista. On kätevämpää säilöä värit asetuksissa, vakioissa tai muuttujissa heksana kuin kolmena erillisenä komponenttina. HEXColor() ottaa parametrikseen heksakoodin, jonka voi syöttää joko merkkijonona tai lukuna. CB kääntää esimerkiksi merkinnän $ff0000 luvuksi 255, jonka HEXColor() käsittelee samana värinä kuin jos sille syötettäisiin merkkijono "ff0000". Näin ollen värit voi pitää ohjelman muistissa joko integereinä tai merkkijonoina. Lisäksi HEXColor() palauttaa syötetyn värin RGB-komponentit globaaleissa muuttujissa HEXR, HEXG ja HEXB. Jos valinnaiseksi toiseksi parametriksi antaa True, funktio ei muuta piirtoväriä, vaan pelkästään palauttaa komponentit globaaleissa. HEX2DEC() tekee saman kuin mitä CB'n kääntäjä tekee $ff0000-koodille, eli palauttaa koodia vastaavan kokonaisluvun. Bloattina mukaan tulee vielä IsNumeric(), jotta arvon tyyppi voidan tunnistaa. Sen verran mitä olen testannut, tämän pitäisi toimia ihan oikein, mutta ilmoittakaa jos virheitä esiintyy.

Code

Select all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Global HEXR, HEXG, HEXB

Repeat
    //Draw background
	HEXColor($ff00ff) //Define a Color For the Circle below (do it here in order To show that the second HEXColor call does Not affect the Circle's Color)
	
    HEXColor(hexa$, True)	//The optional parameter (True) makes HEXColor() to only return the RGB components And Not To call Color command
    ClsColor HEXR,HEXG,HEXB //The RGB components are returned in these Global variables.
    
	Circle ScreenWidth()-50,ScreenHeight()-50,50

    //Draw foreground
	Color 255-HEXR,255-HEXG,255-HEXB //Foreground Color is inverted from background Color
	hexa = Input("Hex Color: ")
	Text 0,15, "Input six characters [0-F] To define a Hex Color."
	Text 0,30, "Current Color in RGB: "+HEXR+", "+HEXG+", "+HEXB
	
	DrawScreen
Forever





Function HEX2DEC(hexa$)
	value = 0
	For i = 1 To Len(hexa)
		dec = InStr("0123456789ABCDEF", Upper(Mid(hexa,i,1)))-1
		If dec >= 0 Then value = value * 16 + dec
		//If dec = -1 Then $hexa is Not a valid Hex chacter And is simply omitted
	Next i
	Return value
EndFunction

Function HEXColor(hexa$, return_only=0)
	If IsNumeric(hexa) Then
		dec = hexa
	Else
		dec = HEX2DEC(hexa)
	EndIf
	HEXR = dec / 256^2
	HEXG = RoundDown(dec / 256) Mod 256
	HEXB = dec Mod 256
	If Not return_only Then Color HEXR,HEXG,HEXB
EndFunction

Function IsNumeric(value$)
    If CountWords(value,".") > 2 Then Return False //Values like 12.34.56 should not be considered as numeric
    If Right(value,1) = "." Then Return False //A number cannot end with a dot. For example 34. is incorrect number. Numbers starting with a dot are allowed.
    
	For i = 1 To Len(value)
		ascii = Asc(Mid(value,i,1))
		If (ascii < 48 Or ascii > 57) And ascii <> 46 Then Return False //46: a Dot, 48-57: numbers 0-9
	Next i
	Return True
EndFunction

Comments

No comments. You can be first!

Leave a comment

You must be logged in to comment.