QImage padding - 任何可用的功能?

QImage padding - any function availavble?

有什么函数可以用来填充我的 QImage 对象吗? 我试图通过网络搜索失败。 提前致谢。

这是我的代码:

#include "mainwindow.h"
#include <QApplication>
#include "qimage.h"
#include <QImage>
#include <QLabel>
#include <QColor>
#include "qcolor.h"
#include <Qdebug>
#include <QGraphicsPixmapItem>
#include <QGraphicsScene>
#include <QGraphicsView>


int main(int argc, char *argv[])
{
    printf("Init!");
    qDebug() << "C++ Style Debug Message";
    QApplication a(argc, argv);
    QGraphicsScene scene;
    QGraphicsView view(&scene);
    int height;
    int width;
    unsigned char *p, *p_begin;
    QImage img("C:\Users\Owner\Pictures\2013-09-26\IMG_0836.JPG");
    height = img.height();
    width = img.width();
    p = (unsigned char *)malloc(height * width * sizeof(unsigned char));
    p_begin = p;

    qDebug() << "Begin For Loop";
    for (int row = 0; row < height; ++row)
    {
    for (int col = 0; col < width; ++col)
    {
        QColor clrCurrent( img.pixel( col, row ));
        *p = (unsigned char)((clrCurrent.green() * 0.587) + (clrCurrent.blue() * 0.114) + (clrCurrent.red() * 0.299));
        p++;
    }
}

qDebug() << "Finished First Loop!";
p = p_begin;
for (int row = 0; row < height; ++row)
{
    for (int col = 0; col < width; ++col)
    {
        QColor clrCurrent(img.pixel(col, row));
        clrCurrent.setBlue((int)(*p));
        clrCurrent.setGreen((int)(*p));
        clrCurrent.setRed((int)(*p));
        img.setPixel(col, row, clrCurrent.rgba());
        p++;
    }
}

QPixmap pixmap = QPixmap::fromImage(img);
QGraphicsPixmapItem *item = new QGraphicsPixmapItem(pixmap);
scene.addItem(item);
view.show();

return a.exec();
 }

您好,我编辑了我的问题,我添加了我的代码,以便让您更好地了解正在发生的事情。任何帮助,将不胜感激。

QImage 无法更改其大小。您需要创建一个更大的新图像,擦除其内容,在其上开始 QPainter,然后在新图像的中心绘制源图像。这样你就会有填充。

下面是一个 returns 图像的填充版本的函数,具有用于填充的给定颜色和用于它的测试工具。

// https://github.com/KubaO/Whosebugn/tree/master/questions/image-pad-35968431
#include <QtGui>

template <typename T>
QImage paddedImage(const QImage & source, int padWidth, T padValue) {
  QImage padded{source.width() + 2*padWidth, source.height() + 2*padWidth, source.format()};
  padded.fill(padValue);
  QPainter p{&padded};
  p.drawImage(QPoint(padWidth, padWidth), source);
  return padded;
}

int main() {
   QImage source{64, 64, QImage::Format_ARGB32_Premultiplied};
   source.fill(Qt::red);
   auto padded = paddedImage(source, 16, Qt::blue);
   padded.save("test.png");
}

输出: