【问题标题】:Qt display settings set to grayscaleQt显示设置设置为灰度
【发布时间】:2016-04-20 16:31:24
【问题描述】:

如何更改 QT 应用程序的显示设置,以使整个应用程序以灰度呈现,每个像素一个字节?

我知道如何使用抓取,然后将颜色帧转换为灰度,然后在 PaintEvent 上重新绘制,但这不是我需要的。 我正在寻找一种无需转换即可将整个屏幕设置为灰度的方法。

【问题讨论】:

  • 我不熟悉 QT,但我认为这是不可能的。如果你能解释为什么你需要这个,你可能会得到更好的答案。
  • “每个像素一个字节”是什么意思?你到底想在哪里拥有这个?窗口系统不会是任何“普通”现代硬件中的系统。
  • 这不适用于 Windows /Linux。
  • 这是针对自定义显示硬件的,它仅支持每像素 8 位的帧。我只是想避免对每一帧进行图像处理。
  • @Alex:我们需要更多信息。有一个相对不为人知的“Qt for Embedded Linux”,它提供了自己的窗口系统(绕过 hyde 的评论),但您似乎遇到了更不寻常的情况。除了 Linux 之外,唯一的 Qt 嵌入式系统是 Symbian 和 Windows CE。您绝对应该提到您正在使用这两者中的哪一个..

标签: c++ qt


【解决方案1】:

好消息是 Qt 实际上支持渲染到灰度软件光栅器,这在qpaintengine_raster_p.hqpaintengine_raster.cpp 中显而易见,

坏消息是您必须实现自己的平台插件,只需从您当前使用的插件开始并覆盖它以使用灰度QImage 进行像素存储,它不适用于QPixmap

case QInternal::Pixmap:
    qWarning("QRasterPaintEngine: unsupported for pixmaps...");

一旦平台插件沿链向下传递灰度QImage,就应该将其拾取并为其配置光栅化器。

More bad news:

在此处没有编写 QPA 插件的详细教程文档 这次。但是,Qt5 附带了两个示例插件:

qtbase/src/plugins/platforms/minimal/
qtbase/src/plugins/platforms/minimalegl/

【讨论】:

  • 不错,但不是one byte per pixel ;)
猜你喜欢
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2012-12-05
  • 1970-01-01
  • 2013-06-17
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多