2016-03-13 2 views
1

Есть ли какая-либо функция, которую я могу использовать для ввода моего объекта QImage? Я попытался выполнить поиск по сети несовместимо. Thx заранее.QImage padding - любая функция доступна?

Вот мой код:

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

Привет Я отредактировал мой вопрос, я добавил свой код, чтобы дать вам больше ощущения того, что происходит. любая помощь будет оценена по достоинству.

+0

Что на самом деле вы хотите достичь? – Apin

+0

Я хочу, чтобы мой qimage с теми же самыми четкими пикселями. –

+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

Смежные вопросы