如何检索QPixmap的“透明”状态?

问题描述

我在构造函数中有一个QMainWindow,其中包含setAttribute(Qt::WA_TranslucentBackground);,其中包含一个QLabel,其中显示了一个QPixmap已加载

QPixmap load(const QString& filepath) {
    QImageReader img_reader { filepath };
    return QPixmap::fromImageReader(&img_reader);
}

然后我有一个删除选定区域的功能

QPixmap remove_rect(const QPixmap& pm,const QRect& target) {
    QPixmap result(pm.size());
    QPainter p(&result);
// copy everything outside the target ...,e.g.
// if( ...
       p.drawPixmap(0,pm,pm.width(),target.top());
// etc ...
    return result;
}

返回的QPixmap成功显示在QLabel上,并且target区域完全透明。 现在,我想自动裁剪/调整像素图pm的大小,删除像素的任何空行/列,即QPainter没有在其上绘制任何内容的行/列。为此,我尝试通过转换为QImage i = pm.toImage();并比较alpha值i.pixelColor(x,y).alpha()来确定边界框,但是遇到了alpha() 总是返回255 的问题因此我根本无法确定边界框。 此外,i.pixelColor().red() /.green() / .blue()返回0 / 0 / 0,但是当我手动绘制像素0,255时,它在QLabel上显示为黑色,而不是透明的。 i.format()返回QImage::Format_RGB32,但转换为i.convertToFormat(QImage::Format_ARGB32);QImage::Format_ARGB32_Premultiplied并没有帮助。

我也考虑使用QBitmap QPixmap::mask(),因为文档说

Extracts a bitmap mask from the pixmap's alpha channel.

这似乎是我所需要的,但是我找不到任何方法从返回的QBitmap中提取实际的位/ alpha值。

我无法在remove_rect(.. 中计算新的大小,因为用户可以动态地使用任意target多次调用该函数。 我可能会起作用的唯一想法是,将QPixmap子类化,并为其赋予一个成员,该成员将以前删除的所有target保存在列表中,然后从中计算出新的大小。但这似乎比需要的要沉重得多。.QPixmap 返回的remove_rect(..的透明性已正确显示,因此必须有一些 检索它的方法,还是没有?所以..

问题:我可以以某种方式确定QPixmap中的像素是透明/空,还是我的想法唯一出路?>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...