SmallBasic:如何将getpixel函数的十六进制值转换为rgb值?

时间:2017-05-26 22:09:27

标签: graphics hex rgb smallbasic

示例代码:

GraphicsWindow.MouseDown = md
Sub md
  color = GraphicsWindow.GetPixel(GraphicsWindow.MouseX,GraphicsWindow.MouseY)
EndSub

这会返回一个十六进制值,但我需要将其转换为rgb值。我该怎么做?

1 个答案:

答案 0 :(得分:0)

转换的诀窍是处理那些讨厌的字母。我发现最简单的方法是使用" Map"将十六进制数字等同于十进制值的结构。 Small Basic使这简单易用,因为Small Basic中的数组实际上是作为地图实现的。

我根据上面的代码片段编写了一个完整的示例。您可以使用此Small Basic导入代码获取它:CJK283

下面的子程序是重要的一点。它将两位十六进制数转换为十进制等效数。它还强调了Small Basic中有限的子程序。在其他语言中,传入参数并返回值时,不是每个调用都有一行,在Small Basic中,这需要在子例程中调整变量,至少需要三行来调用子例程。

  'Call to the ConvertToHex Subroutine
  hex = Text.GetSubText(color,2,2)
  DecimalFromHex()
  red = decimal

Convert a Hex string to Decimal
Sub DecimalFromHex
  'Set an array as a quick and dirty way of converting a hex value into a decimal value
  hexValues = "0=0;1=1;2=2;3=3;4=4;5=5;6=6;7=7;8=8;9=9;A=10;B=11;C=12;D=13;E=14;F=15"  
  hiNibble = Text.GetSubText(hex,1,1)     'The high order nibble of this byte
  loNibble = Text.GetSubText(hex,2,1)     'The low order nibble of this byte
  hiVal = hexValues[hiNibble] * 16        'Combine the nibbles into a decimal value
  loVal = hexValues[loNibble]
  decimal = hiVal + loVal 
EndSub