Kra*_*ime 2 vb.net colors console-application
使用控制台应用程序时,人们不禁会注意到本机命令BackgroundColor和ForegroundColor仅支持CGA色谱(黄色,红色,深黄色,深红色等)

我想做的是扩展它,以便我可以使用我当前分辨率(又名真彩色等)支持的任何颜色,而不仅仅是这个有限的颜色池.
在编写DOS应用程序时(是的.DOS ---古老的学校DOS),我没有任何问题选择几乎任何颜色超出此限制.我记得在.NET(2002年)的婴幼儿时期看到了有关如何做到这一点的一些事情,但我无法找到它,因为搜索中关于"控制台"和"颜色"的每个链接都会提出如何着色,并且仅在图像中描绘的绝对最基本的颜色---基本上向人们展示了如何更改ForegroundColor和BackgroundColor属性.
要澄清 - 我希望能够使用TRUE COLOR aka,使用VB.NET在控制台应用程序中使用字体颜色和背景颜色的整个色谱.
我在这里发现了一篇文章,展示如何找到任何给定颜色的"最接近"控制台颜色,但这不起作用.基本颜色缺少许多真正的颜色,如橙色 - 以及至少1000种其他命名颜色.
我可以通过使用Win32/etc API来破解垃圾,而逻辑认为这必须是可能的,因为在控制台内运行的大量应用程序允许真正的颜色或至少VGA支持.
控制台只是为了提供一种从较旧的操作系统版本移植文本模式程序的方法.这些年来,你对可能发生的事情的记忆可能过于朦胧.MS-Dos从未提供过直接设置ANSI.SYS设备驱动程序之外的颜色的方法,您必须发送转义码来改变文本颜色.很大程度上被忽略,更常见的是使用BIOS,中断10h,功能9.BL寄存器指定属性,前景色为4位,背景色为4位.视频适配器和显示器中的颜色选择是硬连线的.
但到目前为止,最常见的方法是直接写入视频帧缓冲区,地址0xB800:0.屏幕上的每个单元格都由两个字节映射,1表示字符,1表示属性.主要有必要对早期视频适配器滚动屏幕时遭受的可怕眨眼做些什么.CGA并不是IBM工程的胜利.赫拉克勒斯是一家非常受欢迎的公司,它实际上设定了自己的标准.
PC游戏通过VGA适配器得到了提升,就像Doom一样.作为CGA和EGA适配器的后继产品,它支持256种彩色图形模式.它需要一个不同的监视器,一个模拟监视器,并有一个可编程DAC(数模转换器),256个寄存器,从可能的1600万个中选择256色.这向世界介绍了调色板的概念,这是一个非常痛苦的编程挑战.我非常不情愿地记得与RealizePalette() winapi函数作战.
Windows也是真彩色24bpp视频适配器的主要推动力,突破了BIOS模式的局限.1994年左右,他们开始变得负担得起.这种支持从未被反向移植到BIOS,它在20世纪80年代一直停滞不前.
您从Windows 9x中记住的不是控制台.旧的16位DOS程序在模拟器中运行.他们继续使用视频帧缓冲器,写入0xB800:0用于文本模式,0xA000:0用于图形模式,并直接旋转视频适配器控制寄存器.主要支持拦截直接硬件访问由处理器提供,它以"虚拟8086"模式运行.该模拟器的一个重要子组件是"视频采集器",一种可以将虚拟化视频适配器内存映射到窗口中像素的驱动程序.这是你记得看到的窗口.值得注意的是Alt + Enter按键,它可以即时关闭视频采集器,在全屏和窗口视图之间来回切换.
长话短说,控制台窗口只试图模拟BIOS文本视频模式.所需的一切.通过对"属性"的固定解释,4位为前景选择16种颜色中的1种,为背景选择4位.使用图形视频模式的程序必须全屏运行.几乎没有工作,64位版本的Windows不再能够将处理器切换到虚拟8086模式,AMD /英特尔不再支持它.
BIOS文本模式有一些扩展,窗口没有固定到固定的宽度和高度,并支持滚动.控制台窗口支持调色板的概念.您不必满足于花哨的传统颜色,您可以直接从系统菜单中更改它们.属性菜单项,颜色选项卡.以编程方式使用SetConsoleScreenBufferInfoEx(),CONSOLE_SCREEN_BUFFER_INFOEX.ColorTable成员完成.一个包含16个RGB值的数组.否则另一个强烈的提醒是16是一个坚硬的限制:)并且该属性从8位扩展到16位,为特殊效果提供7个额外位.很少使用过,包含winapi控制台功能的apis也倾向于基于传统的BIOS功能.
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |