c - 如何将一个 8 位颜色值拆分为两个 4 位颜色值?

标签 c windows algorithm programming-languages colors

所以我写了一个程序,读取位图并使用 windows.h 打印到控制台。

Windows(在控制台中)允许我为每个字符空间设置两种颜色 - 前景色和背景色。

我仅限于这些颜色的 4 位调色板:

http://www.infotart.com/blog/wp-content/uploads/2008/06/windows_4bit_color_swatches.png

我的程序适用于 16 种颜色,但我无法计算出 256 种颜色。 (或者弄清楚它是否可能)

我需要获取索引颜色的 RGB 值(来自 256 种 8 位颜色,例如 224、64、0)并将其显示为 16 种可用颜色中的两种,其中一种经过抖动处理。

前景字符将是 ASCII 抖动字符之一(我认为是 176、177、178)。

所以我认为每个背景都需要有 0、128、255 等的 R、G、B 值 前景可以是 0、32、64、96、128、160、192、224 或 255

所以如果我有数字 RGB = 192,0,0 我可以将背景设置为 RGB = 128,0,0 前景为 RGB = 255,0,0,ASCII 字符为 176(25% 抖动)

如果我有一个单独的抖动字符可分别用于红绿蓝,这似乎会很简单,但遗憾的是我没有。

我知道控制台是一个糟糕的选择,但我必须在没有 windows gdi 帮助的情况下尝试这样做。

我完全被难住了,试图弄清楚这个算法,甚至连我的逻辑是否有意义都很难。

任何人都可以阐明这一点?感谢所有帮助,我碰壁了。

最佳答案

虽然这可能不是关于从 RGB 到彩色 ASCII 表示的直接答案,8088 Corruption该程序可能是一个很好的引用,可以帮助您了解从位图图像到 CGA 屏幕可以采用的方法。

8088 Corruption 程序旨在运行 full-motion video with sound on an original IBM PC (Google Video link) .

在解释视频编解码器的设计方式时(演示文稿可在 archive.org 获得),创作者尝试了多种技术,其中之一是使用“ASCII 抖动字符”,但对最终结果并不满意“图片”的质量。

因此,他继续尝试一种将多个像素映射到 ASCII 字符的方法。例如,如果有两条线垂直重叠,则 ASCII 字符 X 将绘制在屏幕上。

我实际上并没有查看源代码(我相信它是用 x86 汇编语言编写的),但是从我读过的所用技术的描述来看,它可能是值得一试的东西看看。

关于c - 如何将一个 8 位颜色值拆分为两个 4 位颜色值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4559681/

相关文章:

c - C中内存中的局部变量存储

java - Linux 而不是 Windows? Java Swing

windows - 使用 windows azure 实现视频编辑套件

javascript - javascript .toUpperCase 方法的效率如何?

c - 黎曼和问题

c - 我正在尝试用 C 编写程序以将 DS1302 RTC 与 PIC16F877a 一起使用

c - 如何在 C 中创建二维动态字符串数组

c - 你将如何在 C 中实现 pow(a,b) ?条件如下——

c++ - SetWindowsHookEx() 监控所有线程 : Must the hook procedure be located in a DLL?

c++ - 算法和算法性能的缺陷