Microsoft Windows Logo(MSWLogo)的颜色设定

杀马特。学长 韩版系。学妹 提交于 2019-12-17 17:38:20

【推荐】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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!