このトピックに貢献しましょう。Qt 5.3の時点で、次の関数は適用するのに大いに役立ちますQGraphicsEffect
(QImage
そしてアルファを失うことはありません)-QWidget::grab()
再び回帰しているからです。
QImage applyEffectToImage(QImage src, QGraphicsEffect *effect, int extent=0)
{
if(src.isNull()) return QImage(); //No need to do anything else!
if(!effect) return src; //No need to do anything else!
QGraphicsScene scene;
QGraphicsPixmapItem item;
item.setPixmap(QPixmap::fromImage(src));
item.setGraphicsEffect(effect);
scene.addItem(&item);
QImage res(src.size()+QSize(extent*2, extent*2), QImage::Format_ARGB32);
res.fill(Qt::transparent);
QPainter ptr(&res);
scene.render(&ptr, QRectF(), QRectF( -extent, -extent, src.width()+extent*2, src.height()+extent*2 ) );
return res;
}
この関数を使用して画像をぼかすのは簡単です。
QGraphicsBlurEffect *blur = new QGraphicsBlurEffect;
blur->setBlurRadius(8);
QImage source("://img1.png");
QImage result = applyEffectToImage(source, blur);
result.save("final.png");
もちろん、それを保存する必要はありません。これは単なる有用性の例です。影を落とすこともできます。
QGraphicsDropShadowEffect *e = new QGraphicsDropShadowEffect;
e->setColor(QColor(40,40,40,245));
e->setOffset(0,10);
e->setBlurRadius(50);
QImage p("://img3.png");
QImage res = applyEffectToImage(p, e, 40);
また、エクステントパラメータに注意してください。これによりextent
、元の画像のすべての側面にピクセル数が追加されます。特に、影やぼかしが途切れないようにする場合に便利です。