Метод 1а: возьмите необработанные биты и сделайте это сами.Вы должны быть достаточно хорошо знакомы с растровыми изображениями и алгоритмами размытия, чтобы реализовать размытие самостоятельно.Если вы хотите такой точности, это путь.
QImage image = pixmap.toImage();
if (image.format() != QImage::Format_RGB32)
image = image.convertToFormat(QImage::Format_RGB32);
uchar* bits = image.bits();
int rowBytes = image.bytesPerLine();
DoMyOwnBlurAlgorithm(bits, image.width(), image.height(), rowBytes);
return QPixmap::fromImage(image);
Метод 1b: кому нужны необработанные биты?Вместо этого вы можете использовать image.pixel (x, y) и image.setPixel (x, y, color).Это будет не так быстро, как 1a, но его будет немного легче понять и кодировать.
QImage image = pixmap.toImage();
QImage output(image.width(), image.height(), image.format());
for (int y=0; y<image.height(); ++y)
for (int x=0; x<image.width(); ++x)
output.setPixel(getBlurredColor(image, x, y));
return output;
Метод 2: использовать QGraphicsBlurEffect через виджет или сцену.Код здесь использует виджет метки:
QPixmap BlurAPixmap(const QPixmap& inPixmap)
{
QLabel* label = new QLabel();
label->setPixmap(inPixmap);
label->setGraphicsEffect(new QGraphicsBlurEffect());
QPixmap output(inPixmap.width(), inPixmap.height());
QPainter painter(&output);
label->render(&painter);
return output;
}
Настройте при необходимости.Например, я предполагаю, что стандартный эффект размытия графики приемлем.Я использую метод 2 в моем проекте.