QImage填充 - 任何可用的功能?

时间:2016-03-13 09:03:17

标签: c++ qt image-processing qimage

我是否可以使用任何功能来填充我的QImage对象? 我试图通过网络搜索unuccefuly。 Thx提前。

这是我的代码:

#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();
 }

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

1 个答案:

答案 0 :(得分:1)

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

下面是一个函数,它返回图像的填充版本,给定的颜色用于填充,以及测试工具。

// https://github.com/KubaO/stackoverflown/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");
}

输出:

the generated padded image