【发布时间】:2020-06-05 02:11:19
【问题描述】:
从我正在编写的 .NET Core 的 24 位颜色 ANSI 库的输出中查看下图。我想改进 DrawBox 函数,该函数将矩形轮廓绘制到渐变框,以在写入新字符时保留屏幕缓冲区中的底层背景颜色属性。
ReadConsoleOutput 让我在某个位置获取屏幕缓冲区,但 CHAR_INFO 获取反映标准 16 色版本的属性。有没有办法在某个屏幕缓冲区位置获取字符的前景和背景属性的 24 位颜色?
https://docs.microsoft.com/en-us/windows/console/readconsoleoutput
https://docs.microsoft.com/en-us/windows/console/char-info-str
【问题讨论】:
-
你想获取一个字符的RGB值吗?
-
@StriveSun-MSFT 是的,这是正确的,当我查看 ReadConsoleOutput 生成的属性时,它让我知道该属性的红色、绿色和蓝色位标志已设置,但仅此而已事实上,我不知道如何并且想知道如何获取先前由 esc[38;2;RG;Bm 或 esc[48;2;R;G;Bm off 生成的颜色的扩展 RGB 值在同一控制台上执行应用程序之前可能已生成的屏幕缓冲区。
-
@StriveSun-MSFT 我认为您的其他 cmets 被删除,您的研究结果是不利的?似乎应该在 VT 标准中作为 csi 代码全面实施。
-
win32 控制台窗口不支持渐变背景。您的项目如何开发渐变色?我可以认为您的目的是读取窗口上任何点的 RGB 颜色值吗?请参阅link。
-
@StriveSun-MSFT 在 C# 中非常容易,只是定义了 x/y/size/width 的开始和结束颜色之间的线性插值,然后 esc[48;2;R;G;Bm VT代码并使用空格字符。但是,这会完全覆盖屏幕缓冲区的现有矩形。因此,作为这个矩形渐变函数的解决方法,我现在返回一个线性插值颜色数组。我将很快为 C# 发布一个控制台库。