gpt4 book ai didi

c++ - QImage padding - 任何可用的功能?

转载 作者:行者123 更新时间:2023-11-30 05:30:30 26 4
gpt4 key购买 nike

有什么函数可以用来填充我的 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,然后在新图像的中心绘制源图像。这样你就会有填充。

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

// 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

关于c++ - QImage padding - 任何可用的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35968431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com