APP下载

色彩斑斓的记事本

2016-05-14陈凯

中国信息技术教育 2016年5期
关键词:记事本字符画布

陈凯

对计算机来说,不管在记事本中输入的是什么字符,其在本质上都是存储了一段二进制数据。如果输入的是英文或数字,那么记事本会用ASCII码将这些符号编码成二进制数据;反过来,如果一段二进制数据是用ASCII码编制而成的,那么记事本就能将这些数据还原成英文或数字符号。但如果那些数据不是用ASCII码编制而成的,那用记事本打开后,会看到什么呢?有人说,那样会得到一串乱码——先别着急下结论,来看这样一个实验。

用记事本看画图

打开Windows的画图软件,在整个矩形的画布上倾倒红色,并保存该文件为24位色的位图,命名为test1.bmp,然后再往画布上倾倒紫色(可在“编辑颜色”中选取某种紫色),并保存为24位色的位图,命名为test2.bmp。接着用记事本分别打开这两个BMP格式的图像文件,发现显示的效果是不同的(如图1)。

红色的图像文件用记事本打开后,除了在第一行有一些看不懂的与图像格式有关的信息外,其他就是许多行的空格,而紫色的图像文件用记事本打开后,里面铺满了字符“f?f”,显得很有规律,这显然不是用“乱码”一词就能搪塞过去的。当然,读者自己在尝试时,因为选的紫色的色彩浓度和笔者未必一样,所以出现的字符也有可能是不一样的。

由于24位的位图文件中的每个像素的颜色即红、绿、蓝各占8位bit存储空间,而ASCII码与扩展ASCII码占去的内存空间也正好8位,因此不妨猜测,“f?f”中的三个字符分别代表了RGB值中的蓝色、绿色和红色的颜色值(BMP格式文件中的颜色是按蓝、绿、红的顺序来索引的)。查ASCII码表可知,“f”的值为01100110,“?”的值为00111111,因此,每个像素点的颜色值是“01100110”“00111111”和“01100110”,换成十进制就是“102”“63”和“102”。在画图软件的“编辑颜色”窗口中输入这三个值后,发现选中的颜色正是紫色,于是先前的猜想得到了验证(如图2)。

至于红色,因为其RGB值分别是红色11111111、绿色00000000和蓝色00000000,这些值恰巧都对应了非字符类型的ASCII码,所以记事本就只好以空格代之。

用颜色隐藏ASCII字符

基于以上原理,可以做一个有趣的实验,将词语隐藏在BMP格式的图像中。例如,将“CAT”一词隐藏到一幅小猫的图画中,具体怎么做呢?

①找到字符“C”“A”和“T”的ASCII码的十进制值,“C”为67,“A”为65,“T”为84。

②打开画图软件的“编辑颜色”窗口,在颜色值中输入红色为84,绿色为65,蓝色为67,然后就得到了一种灰中带淡紫的颜色(注意是按蓝、绿、红的顺序编码)。

③将这种颜色在画布上隐蔽的地方点上几点,然后保存为24位色的BMP格式文件。

④用记事本打开这个BMP图像文件,满篇“乱码”中就隐藏着“CAT”一词,不妨查找一下。

用类似的方法,只要有耐心,就可以在图画中隐藏大段有含义的文字,这项游戏不仅有趣,同时还涉及ASCII码和位图编码的知识。最后留给读者一个有难度的任务:请存储一张小猫的BMP位图,要求用图画软件打开时能正常显示一只猫,而用记事本打开后,则可在一片“乱码”中找出“喵”字。

猜你喜欢

记事本字符画布
Python实现图片转字符画
正则表达式快速入门
图片轻松变身ASCⅡ艺术画
跟踪导练(三)
画布
跟踪导练(一)
小小记事本
土拨鼠的记事本
记事本里的信息技术课
大师的画布