问题描述
我在构造函数中有一个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 (将#修改为@)