c - C 中的图像处理——处理一个 256 色位图图像

标签 c turbo-c bgi

我正在使用 Borland Turbo C 和 Borland 图形界面。

我有两个问题:

  1. 我必须处理 256 色位图图像。使用EGAVGA驱动很难处理,所以我决定使用SVGA驱动。它工作正常,但是当我将图像转换为灰度时,而不是只显示灰度图像,整个窗口进入灰度模式。是否有任何方法可以使用 outp(0x03c8, data)outp(0x03c9, data) 函数更改特定区域的调色板?

  2. 鼠标功能在 EGAVGA 模式下运行良好,但光标在 SVGA 模式下不可见。甚至鼠标也能正常工作。如何为 256 色的 SVGA 模式创建自定义鼠标光标?我有使用 0x10 中断在 EGAVGA 模式下创建自定义鼠标指针的代码,但它不适用于 SVGA 模式?

最佳答案

在调色板视频模式下,调色板条目会影响整个屏幕。如果您更改任何索引,则屏幕上具有该索引的所有像素都会更改,无论它们是否属于您的图像。

如果你的图像要与其他人共享屏幕,并且你希望该图像是唯一一个变为灰度的图像,你必须预留一些调色板条目供你的图像专用,因此更改它们不会影响屏幕上的其他图形元素。

在 Windows 和 X-Window 上,如果我没记错的话,当您的窗口应用程序获得焦点时,整个屏幕将具有您调色板的颜色。否则,它将恢复为系统调色板,您的窗口及其内容将显示为“奇怪”。

关于c - C 中的图像处理——处理一个 256 色位图图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29063404/

相关文章:

c - UDisks 脚本列出所有已安装的 USB 设备

c - 使用 C 中的矩形方法进行二重积分

c - IF 语句 ASM 和 CPU 分支

c - C中的除法错误

c - c/c++ 中的 3D 或 2D 图形?

c++ - 可移植图形API

c - 什么是 __attribute__((unused)) 静态的?

c - C 中元音变音 'A' 的用途或等效项是什么?

c++ - turbo c 中的二进制表示

c - C 中 do-while 循环的意外行为?