【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
今天研究了下 Microsoft Windows Logo(下文简称MSWLogo)中的颜色。
与颜色的设定有关的命令一共有三个:
1、SETPENCOLOR,可简写为SETPC,用于设定画笔颜色
2、SETFLOODCOLOR,可简写为SETFC,用于设定BITBLOCK命令绘制区域时的填充色
3、SETSCREENCOLOR,可简写为SETSC,用于设定屏幕背景色
这些命令后面可以接两类参数:
第一类参数是一个在1至15间的数字,每个数字代表了一种颜色,共有16种颜色,这些颜色在不同的Logo程序中可能会不一样。
如在turtleacademy.com中列举的logo基本色有:
0: black | 1: blue | 2: green | 3: cyan |
4: red | 5: magenta | 6: yellow | 7: white |
8: brown | 9: tan | 10: green | 11: aqua |
12: salmon | 13: purple | 14: orange | 15: gray |
(https://turtleacademy.com/files/lang.html)
在《The Great Logo Adventure》中列举的基本色为:
对于MSWLogo中的基础色,我们可以用下面的Procedure来看一下:
TO TEST_BASIC_COLOR
FOR [COUNTER 0 15 1] [
SETFLOODCOLOR :COUNTER
BITBLOCK 100 160 - :COUNTER * 10
]
END
调用该方法后绘制的图像为:
第二类参数是一个包含三个元素的LIST,三个数字分别代表颜色的RGB值,如白色是[255 255 255]
另外,MSWLogo还支持另外一种方式去设置这三类颜色,即通过Set菜单下的PenColor、FloodColor、ScreenColor进行设置:
颜色设定界面如下:
鉴于现在表示颜色很多时候都使用三组十六进制数字,因此我也写了一个函数,传入十六进制颜色代码,返回颜色:
TO GET_COLOR :WEB_COLOR_CODE
LOCALMAKE "A ITEM 1 :WEB_COLOR_CODE
LOCALMAKE "B ITEM 2 :WEB_COLOR_CODE
LOCALMAKE "C ITEM 3 :WEB_COLOR_CODE
LOCALMAKE "D ITEM 4 :WEB_COLOR_CODE
LOCALMAKE "E ITEM 5 :WEB_COLOR_CODE
LOCALMAKE "F ITEM 6 :WEB_COLOR_CODE
LOCALMAKE "AB GET_NUM_FROM_HEX_2 :A :B
LOCALMAKE "CD GET_NUM_FROM_HEX_2 :C :D
LOCALMAKE "EF GET_NUM_FROM_HEX_2 :E :F
LOCALMAKE "COLOR_LIST []
LOCALMAKE "COLOR_LIST LPUT :AB :COLOR_LIST
LOCALMAKE "COLOR_LIST LPUT :CD :COLOR_LIST
LOCALMAKE "COLOR_LIST LPUT :EF :COLOR_LIST
OUTPUT :COLOR_LIST
END
TO GET_NUM_FROM_HEX :H
IF :H = 0 [OUTPUT :H]
IF :H = 1 [OUTPUT :H]
IF :H = 2 [OUTPUT :H]
IF :H = 3 [OUTPUT :H]
IF :H = 4 [OUTPUT :H]
IF :H = 5 [OUTPUT :H]
IF :H = 6 [OUTPUT :H]
IF :H = 7 [OUTPUT :H]
IF :H = 8 [OUTPUT :H]
IF :H = 9 [OUTPUT :H]
IF :H = "A [OUTPUT 10]
IF :H = "B [OUTPUT 11]
IF :H = "C [OUTPUT 12]
IF :H = "D [OUTPUT 13]
IF :H = "E [OUTPUT 14]
IF :H = "F [OUTPUT 15]
END
TO GET_NUM_FROM_HEX_2 :H1 :H2
OUTPUT (GET_NUM_FROM_HEX :H1) * 16 + (GET_NUM_FROM_HEX :H2)
END
其中GET_COLOR根据十六进制颜色代码作为参数,返回指定颜色的RGB数组,我们可以就此封装一些我们需要使用的常用颜色,如:
TO COLOR_LAWNGREEN
OUTPUT GET_COLOR "7CFC00
END
TO COLOR_SKYBLUE
OUTPUT GET_COLOR "87CEEB
END
使用这些颜色时,直接将COLOR_XXX作为SETPENCOLOR、SETFLOODCOLOR、SETSCREENCOLOR的参数即可:
END
来源:oschina
链接:https://my.oschina.net/u/1425762/blog/709221