How to include .txt on Qt
-
@Payx
I think you can output theimageName
in theforeach
to check if there is a file name.and you can try to use debug mode and execute step by step to find out which line cause the problem.
maybe it will be more clear what's wrong with it.
-
Hi
Yes as @Flotisable says, you should check what is going on with the file nameso
xxxx
QPixmap pix( ci.ImageName );
qDebug() << "image i get from ci.ImageName : " << ci.ImageName;and see what it really is.
-
with qDebug() << "image i get from ci.ImageName : " << ci.ImageName;
image i get from ci.ImageName : ":/img/noir.png" setGeometry: Unable to set geometry 8x7+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x7+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). yep its no good yep its no good yep its no good yep its no good yep its no good yep its no good yep its no good yep its no good yep its no good yep its no good yep its no good its OK with base color image i get from ci.ImageName : ":/img/noir.png" setGeometry: Unable to set geometry 8x7+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x7+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). yep its no good
-
Ok so path is good ? seems ok.
So I guess it does load it there. ( in pix)
But why doesif (pix.isNull()){
qDebug() << "yep its no good";
return;
};still trigger then ?
or is that from
if (IsCloseColor(BaseColor, colour) == true){
xxx
}
else {
qDebug() << "yep its no good";
}?
-
EDIT :
i replaced this line "diffBlue + diffRed + diffGreen < 100" 100 by 450 and increase the picture to a 20 * 20
i have :
image i get from ci.ImageName : ":/img/fraise.png" setGeometry: Unable to set geometry 20x16+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x16+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/rose.png" setGeometry: Unable to set geometry 20x14+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x14+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/ballepeche.png" setGeometry: Unable to set geometry 19x20+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x20+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). yep its no good yep its no good its OK with base color image i get from ci.ImageName : ":/img/noir.png" setGeometry: Unable to set geometry 20x17+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x17+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/balebleue.png" QPixmap::scaled: Pixmap is a null pixmap setGeometry: Unable to set geometry 5x13+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x13+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/turquoise.png" setGeometry: Unable to set geometry 11x20+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x20+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/balleverte.png" setGeometry: Unable to set geometry 20x15+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x15+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/violet.png" setGeometry: Unable to set geometry 15x20+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x20+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/gris.png" setGeometry: Unable to set geometry 16x20+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x20+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/marron.png" setGeometry: Unable to set geometry 8x20+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x20+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/fraise.png" setGeometry: Unable to set geometry 20x16+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x16+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/rose.png" setGeometry: Unable to set geometry 20x14+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x14+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). its OK with base color image i get from ci.ImageName : ":/img/ballepeche.png" setGeometry: Unable to set geometry 19x20+640+280 on QWidgetWindow/'QLabelClassWindow'. Resulting geometry: 120x20+640+280 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size: 0x0, maximum size: 16777215x16777215). yep its no good yep its no good its OK with base color image i get from ci.ImageName : ":/img/noir.png"
its better no ?
and i had already changed into a
if (pix.isNull()){ qDebug() << "nothing"; return; };
to see exactly where it bug
EDIT : it will not be displayed on my label, so if i put my the definition of my label in my .h doest it work?
-
@Payx
Well it seems you just do
QLabel abc;
which will not work at all as this label is then deleted as soon as function ends.Putting it in .h will help it not getting deleted but its still not connected to the screen in any way.
If you have UI file. Cant u put it there?
and get via
ui->label
Then its in the right place.To do this, you must make Remplissage member of the mainwindow so you can acces its UI
-
@Payx said in How to include .txt on Qt:
a label in my UI the picture will just be displayed in the same label no ?
Yes. You can add more than one label if u need more pics to be shown at same time.
-
my funtion is
void Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectangle, const QColor& colour) { int maxX = topLeft.x() + rectangle.width(); int maxY = topLeft.y() + rectangle.height(); for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) {
in
Remplissage(pixi, QPoint(i, j), QSize(z, z), Couleurdominante(pixi, QPoint(i, j), QSize(z, z)));
so it depends on my z, if i say that my z = 20; and if my picture is 540 * 540 i will need 729 labels lol.
example :
here my previous code : http://hpics.li/36d1f82
my picture is 128 * 128, if my z = 28; it appears 4 colors by 4 colors.
How can i display a picture by color without add 10000 labels, thats why i though that create a label in my loop will work
-
Create a new image and put it into a secondary QLabel.
-
i changed a lot in my code with research :
(.Cpp)
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QPixmap> #include <QImage> #include <QFileDialog> #include <QColor> #include <QPoint> #include <QSize> #include <iostream> #include <QMapIterator> #include <QMap> #include <QDebug> #include <QGraphicsItem> #include <QGraphicsScene> using namespace std; // forwards QColor Couleurdominante(const QImage& image, const QPoint& topLeft, const QSize& rectSize); void Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectSize, const QColor& colour); bool IsCloseColor( QColor c1, QColor c2 ); void Remplacement (const QColor& colour, const QPoint& topLeft, QImage& image); //----------------------------------------------------- QMap<QRgb, CostInfo > Costs = { { QColor(255 , 0 , 0 ).rgb(), { ":/img/fraise.png", 10 }}, { QColor(0 , 255 , 0 ).rgb(), { ":/img/balleverte.png", 20 }}, { QColor(0 , 0 , 255 ).rgb(), { ":/img/ballebleue.png", 20 }}, { QColor(255 , 255 , 255 ).rgb(), { ":/img/balleblanche.png", 20 }}, { QColor(255 , 128 , 0 ).rgb(), { ":/img/ballepeche.png", 20 }}, { QColor(0 , 0 , 0 ).rgb(), { ":/img/noir.png", 20 }}, { QColor(102 , 51 , 0 ).rgb(), { ":/img/marron.png", 20 }}, { QColor(255 , 102 , 78 ).rgb(), { ":/img/rose.png", 20 }}, { QColor(0 , 204 , 204 ).rgb(), { ":/img/turquoise.png", 20 }}, { QColor(255 , 178 , 102 ).rgb(), { ":/img/beige.png", 20 }}, { QColor(76 , 0 , 153 ).rgb(), { ":/img/violet.png", 20 }}, { QColor(100 , 100 , 100 ).rgb(), { ":/img/gris.png", 20 }}, }; //----------------------------------------------------- MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } //----------------------------------------------------- MainWindow::~MainWindow() { delete ui; } //----------------------------------------------------- void MainWindow::on_push_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/", tr("Image Files (*.png *.jpg *.bmp)")); QPixmap pix(fileName); ui->label->setPixmap(pix); ui->label->setFixedHeight(pix.height()); ui->label->setFixedWidth(pix.width()); const QSize s = pix.size(); pixi = QImage(pix.toImage()); ui->label_2->setText( "Size: " + QString::number(s.width()) + " " + QString::number(s.height()) ); } //----------------------------------------------------- void MainWindow::on_push2_clicked() { int z = 20 ; for (int i = 0; i < pixi.width(); i += z) { for (int j = 0; j < pixi.height(); j += z) { Remplissage(pixi, QPoint(i, j), QSize(z, z), Couleurdominante(pixi, QPoint(i, j), QSize(z, z))); Remplacement(Couleurdominante(pixi, QPoint(i, j), QSize(z, z)), QPoint(i,j),pixi ); } } pixa = QPixmap::fromImage(pixi); ui->label_3->setPixmap(pixa); ui->label_3->setFixedHeight(pixa.height()); ui->label_3->setFixedWidth(pixa.width()); } //----------------------------------------------------- void Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectangle, const QColor& colour) { int maxX = topLeft.x() + rectangle.width(); int maxY = topLeft.y() + rectangle.height(); for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) { image.setPixelColor(x, y, colour); }}} //----------------------------------------------------- QColor Couleurdominante(const QImage& image, const QPoint& topLeft, const QSize& rectangle) { int rouge = 0, vert = 0, bleue = 0; int X = topLeft.x() + rectangle.width(); int Y = topLeft.y() + rectangle.height(); for (int y = topLeft.y(); y < Y; y++) { for (int x = topLeft.x(); x < X; x++) { QRgb pixel = image.pixel(x, y); rouge += qRed(pixel); vert += qGreen(pixel); bleue += qBlue(pixel); } } int n = rectangle.width() * rectangle.height(); Q_ASSERT(n); if (n <= 0) return Qt::black; return QColor(rouge / n, vert / n, bleue / n); } //----------------------------------------------------- bool IsCloseColor( QColor c1, QColor c2 ) { int diffRed = abs(c1.red() - c2.red()); int diffGreen = abs(c1.green() - c2.green()); int diffBlue = abs(c1.blue() - c2.blue()); if (diffBlue + diffRed + diffGreen < 350) { return true; } else { return false; } } //----------------------------------------------------- void MainWindow::on_verticalSlider_sliderMoved(int position) { } void Remplacement (const QColor& colour, const QPoint& topLeft, QImage& image){ if (Costs.contains( colour.rgb() )) { CostInfo& ci = Costs[colour.rgb()]; // int Cost = ci.Cost; qDebug() << "check me--->" << ci.ImageName; QPixmap pix( ci.ImageName ); if (pix.isNull()){ qDebug() << "nothing"; return; }; QPixmap scaledPix = pix.scaled( 20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation ); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(scaledPix); scene.addItem(item); item->setPos(topLeft.x() , topLeft.y()); } else { foreach( QRgb key, Costs.keys() ) { QColor BaseColor( key ); if (IsCloseColor(BaseColor, colour) == true){ if ( Costs.contains( BaseColor.rgb())){ qDebug () << "its OK with base color"; }else{ qDebug () << " base color had no match!!"; } CostInfo& ci = Costs[BaseColor.rgb()]; QPixmap pix( ci.ImageName ); qDebug() << "image i get from ci.ImageName : " << ci.ImageName; QPixmap scaledPix = pix.scaled( 20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation ); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(scaledPix); scene.addItem(item); item->setPos(topLeft.x() , topLeft.y()); } else { qDebug() << "yep its no good"; } } } }
i find a method for display my image or pix (i think) but i'm blocked with the scene ... tell me if i'm in the right direction
-
@Payx
this is what I think before
I think we can make a method likesetImage
by scaling the origin image and then set the pixel according to the image that is readand I'll read your code
by the way, can you modify your indentation? I find it's hard to read your code with too many tabs, I need to scroll from left to right. -
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QPixmap> #include <QImage> #include <QFileDialog> #include <QColor> #include <QPoint> #include <QSize> #include <iostream> #include <QMapIterator> #include <QMap> #include <QDebug> #include <QGraphicsItem> #include <QGraphicsScene> using namespace std; // forwards QColor Couleurdominante(const QImage& image, const QPoint& topLeft, const QSize& rectSize); void Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectSize, const QColor& colour); bool IsCloseColor( QColor c1, QColor c2 ); void Remplacement (const QColor& colour, const QPoint& topLeft, QImage& image); QGraphicsScene scene; //----------------------------------------------------- QMap<QRgb, CostInfo > Costs = { { QColor(255 , 0 , 0 ).rgb(), { ":/img/fraise.png", 10 }}, { QColor(0 , 255 , 0 ).rgb(), { ":/img/balleverte.png", 20 }}, { QColor(0 , 0 , 255 ).rgb(), { ":/img/ballebleue.png", 20 }}, { QColor(255 , 255 , 255 ).rgb(), { ":/img/balleblanche.png", 20 }}, { QColor(255 , 128 , 0 ).rgb(), { ":/img/ballepeche.png", 20 }}, { QColor(0 , 0 , 0 ).rgb(), { ":/img/noir.png", 20 }}, { QColor(102 , 51 , 0 ).rgb(), { ":/img/marron.png", 20 }}, { QColor(255 , 102 , 78 ).rgb(), { ":/img/rose.png", 20 }}, { QColor(0 , 204 , 204 ).rgb(), { ":/img/turquoise.png", 20 }}, { QColor(255 , 178 , 102 ).rgb(), { ":/img/beige.png", 20 }}, { QColor(76 , 0 , 153 ).rgb(), { ":/img/violet.png", 20 }}, { QColor(100 , 100 , 100 ).rgb(), { ":/img/gris.png", 20 }}, }; //----------------------------------------------------- MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } //----------------------------------------------------- MainWindow::~MainWindow() { delete ui; } //----------------------------------------------------- void MainWindow::on_push_clicked() { QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), "/", tr("Image Files (*.png *.jpg *.bmp)")); QPixmap pix(fileName); ui->label->setPixmap(pix); ui->label->setFixedHeight(pix.height()); ui->label->setFixedWidth(pix.width()); const QSize s = pix.size(); pixi = QImage(pix.toImage()); ui->label_2->setText( "Size: " + QString::number(s.width()) + " " + QString::number(s.height()) ); } //----------------------------------------------------- void MainWindow::on_push2_clicked() { int z = 20 ; for (int i = 0; i < pixi.width(); i += z) { for (int j = 0; j < pixi.height(); j += z) { Remplissage(pixi, QPoint(i, j), QSize(z, z), Couleurdominante(pixi, QPoint(i, j), QSize(z, z))); Remplacement(Couleurdominante(pixi, QPoint(i, j), QSize(z, z)), QPoint(i,j),pixi ); } } pixa = QPixmap::fromImage(pixi); ui->label_3->setPixmap(pixa); ui->label_3->setFixedHeight(pixa.height()); ui->label_3->setFixedWidth(pixa.width()); } //----------------------------------------------------- void Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectangle, const QColor& colour) { int maxX = topLeft.x() + rectangle.width(); int maxY = topLeft.y() + rectangle.height(); for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) { image.setPixelColor(x, y, colour); }}} //----------------------------------------------------- QColor Couleurdominante(const QImage& image, const QPoint& topLeft, const QSize& rectangle) { int rouge = 0, vert = 0, bleue = 0; int X = topLeft.x() + rectangle.width(); int Y = topLeft.y() + rectangle.height(); for (int y = topLeft.y(); y < Y; y++) { for (int x = topLeft.x(); x < X; x++) { QRgb pixel = image.pixel(x, y); rouge += qRed(pixel); vert += qGreen(pixel); bleue += qBlue(pixel); } } int n = rectangle.width() * rectangle.height(); Q_ASSERT(n); if (n <= 0) return Qt::black; return QColor(rouge / n, vert / n, bleue / n); } //----------------------------------------------------- bool IsCloseColor( QColor c1, QColor c2 ) { int diffRed = abs(c1.red() - c2.red()); int diffGreen = abs(c1.green() - c2.green()); int diffBlue = abs(c1.blue() - c2.blue()); if (diffBlue + diffRed + diffGreen < 350) { return true; } else { return false; } } //----------------------------------------------------- void MainWindow::on_verticalSlider_sliderMoved(int position) { } void Remplacement (const QColor& colour, const QPoint& topLeft, QImage& image){ if (Costs.contains( colour.rgb() )) { CostInfo& ci = Costs[colour.rgb()]; // int Cost = ci.Cost; qDebug() << "check me--->" << ci.ImageName; QPixmap pix( ci.ImageName ); if (pix.isNull()){ qDebug() << "nothing"; return; }; QPixmap scaledPix = pix.scaled( 20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation ); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(scaledPix); scene.addItem(item); item->setPos(topLeft.x() , topLeft.y()); } else { foreach( QRgb key, Costs.keys() ) { QColor BaseColor( key ); if (IsCloseColor(BaseColor, colour) == true){ if ( Costs.contains( BaseColor.rgb())){ qDebug () << "its OK with base color"; }else{ qDebug () << " base color had no match!!"; } CostInfo& ci = Costs[BaseColor.rgb()]; QPixmap pix( ci.ImageName ); qDebug() << "image i get from ci.ImageName : " << ci.ImageName; QPixmap scaledPix = pix.scaled( 20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation ); QGraphicsPixmapItem *item = new QGraphicsPixmapItem(scaledPix); scene.addItem(item); item->setPos(topLeft.x() , topLeft.y()); } else { qDebug() << "yep its no good"; } } } }
here my code.
My original image is already scaled with
for (int i = 0; i < pixi.width(); i += z) { for (int j = 0; j < pixi.height(); j += z) {
so i just add one function to replace rectangle of color by the picture who correspond to this color
-
@Payx
so where is thescene
? I don't find any declaration.
and I don't find a way to convert aQGraphicsScene
to aQImage
I have two directions
- if you want to use the
QGraphicsScene
, then you don't need to convert it into a image. just use the scene to show your image, and you can read Graphics View Framework to see how to use it. - just copy the
scaledPix
pixel by pixel to the image
- if you want to use the