FreeDOS 的 16 种颜色的由来

Jim Hall 的头像

·

·

·

2,645 次阅读

为什么文本只能使用这些有限的颜色显示,为什么 FreeDOS 使用这些颜色和阴影,而不是其他颜色?答案就像技术中的许多事情一样,历史原因。

如果你仔细了解过 FreeDOS,你可能已经注意到文本使用有限的颜色范围 —— 16 种文本颜色和 8 种背景颜色。这类似于 Linux 显示文本颜色的方式 —— 你或许能够在 Linux 终端中更改 文本颜色,但你仍然只能使用 16 种文本颜色和 8 种背景颜色。

终端颜色

DOS 文本有 16 种颜色和 8 种背景颜色(吉姆·霍尔,CC-BY SA 4.0

为什么文本只能使用这些有限的颜色显示,为什么 FreeDOS 使用这些颜色和阴影,而不是其他颜色?

答案就像技术中的许多事情一样,历史原因。

PC 色彩的由来

为了解释为什么文本只有 16 种颜色,让我给你讲一个关于第一台 IBM 个人计算机的故事。这个故事的部分内容可能有些杜撰,但基本内容已经足够接近。

IBM 于 1981 年发布了 个人计算机 Personal Computer 5150(“IBM PC”)。该 PC 使用了一个简单的监视器屏幕,以绿色显示文本。由于此显示器仅适用于一种颜色,因此被称为 单色 monochrome (“IBM 5151 单色显示器”,搭载 IBM 单色显示适配器 Monochrome Display Adapter ,即 MDA)。

同年,IBM 发布了 PC 的更新版本,带来了惊人的技术成就 —— 颜色!新的 IBM 5153 彩色显示器依赖于新的 IBM 彩色图形适配器 Color Graphics Adapter (CGA)。正是由于这个原始的 CGA,所有的 DOS 文本都继承了它们的颜色。

但在我们讨论那一部分之前,我们首先需要了解一些关于颜色的东西。当我们谈论计算机屏幕上的颜色时,我们谈论的是混合 三原色(红色、绿色和蓝色)的不同值。你可以将不同级别(“亮度”)的红光、绿光和蓝光混合在一起,以创建几乎任何颜色。混合红色和蓝色光,你会得到洋红色。混合蓝色和绿色,你会得到青色或浅绿色。均匀地混合所有颜色,你会得到白色。没有任何浅色,你会看到黑色(没有颜色)。

三原色

混合红色、绿色和蓝色光以获得不同的颜色(吉姆·霍尔,CC-BY SA 4.0

IBM 5153 彩色显示器通过在 阴极射线管 cathode ray tube (CRT)上点亮微小的红色、绿色和蓝色光点来向用户呈现颜色。这些小点排列得非常紧密,并以红色、绿色和蓝色的三色点组成一个“像素”的模式排列。通过控制同时点亮哪些荧光点,IBM 5153 彩色显示器可以显示不同颜色的像素。

CRT 像素

每个红色、绿色和蓝色三元组都是一个像素(吉姆·霍尔,CC-BY SA 4.0

顺便说一句,即使是现代显示器也使用这种红色、绿色和蓝色点的组合来表示颜色。现代计算机的不同之处在于,每个像素都使用红色、绿色和蓝色 LED 灯(通常并排排列),而不是微小的荧光点。计算机可以打开或关闭每个 LED 灯,以混合每个像素中的红色、绿色和蓝色。

液晶像素

每个红色、绿色和蓝色三元组都是一个像素(吉姆·霍尔,CC-BY SA 4.0

定义 CGA 颜色

IBM 工程师意识到他们可以通过混合红色、绿色和蓝色像素来显示多种颜色。在最简单的情况下,你可以假设单个像素中的每个红色、绿色和蓝色点要么“开”,要么“关”。正如任何计算机程序员都会告诉你的那样,你可以将“开”和“关”表示为二进制 —— 1(1 = 开)和 0(0 = 关)。

用 1 或 0 表示红色、绿色和蓝色意味着你可以组合多达八种颜色,从 000(红色、绿色和蓝色都关闭)到 111(红色、绿色和蓝色都打开)。请注意,位模式类似于“RGB”,因此 RGB=001 是蓝色的(只有蓝色是打开的),RGB=011 是青色的(绿色和蓝色都打开了):

颜色代码名称

via: https://opensource.com/article/21/6/freedos-sixteen-colors

作者:Jim Hall 选题:lujun9972 译者:gpchn 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

2 条回复

  1. 来自北京的 Firefox 104.0|GNU/Linux 用户 的头像
    来自北京的 Firefox 104.0|GNU/Linux 用户

    好文!

    来自北京
  2. hsrzq [Safari 16.0|Mac 10.15] 的头像
    hsrzq [Safari 16.0|Mac 10.15]

    原来如此!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注