How to include .txt on Qt
-
wrote on 9 Jan 2017, 22:50 last edited by Payx 1 Oct 2017, 09:56
Something like :
QImage from pix
And put the image into a label ?I know that put a label into a loop wont work u told me. But how can i do so ?
-
wrote on 10 Jan 2017, 16:21 last edited by Payx 1 Oct 2017, 16:24
nobody know how to ?
or maybe an other way, if its too complicated ^^
-
@Payx
You lost me on what you are trying with the Labels. 729 ?!?!
Do you mean to have the lables like
or how would you place all these labels? -
wrote on 10 Jan 2017, 16:55 last edited by
label is not obligatory, it's just me with my few knowlegde that i said i can use labels.
but the problem is that i have to replace the color by the picture (replace or add) and its here that i'm blocked
-
label is not obligatory, it's just me with my few knowlegde that i said i can use labels.
but the problem is that i have to replace the color by the picture (replace or add) and its here that i'm blocked
Lifetime Qt Championwrote on 10 Jan 2017, 16:56 last edited by mrjj 1 Oct 2017, 16:57@Payx
on top of the "red" image ? so that each cell is an image? -
wrote on 10 Jan 2017, 17:01 last edited by Payx 1 Nov 2017, 01:02
yes each cell is an image.
on the picture that you showed there is 16 cell so 16 picture who depend on the color
Edit : we had before "image.setPixelColor(x, y, colour);"
can't we have like image.'setImage' or something?
-
wrote on 11 Jan 2017, 01:49 last edited by Payx 1 Nov 2017, 01:49
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
-
yes each cell is an image.
on the picture that you showed there is 16 cell so 16 picture who depend on the color
Edit : we had before "image.setPixelColor(x, y, colour);"
can't we have like image.'setImage' or something?
wrote on 11 Jan 2017, 02:03 last edited by@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. -
wrote on 11 Jan 2017, 02:09 last edited by
#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
-
#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
wrote on 11 Jan 2017, 02:27 last edited by@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
-
wrote on 11 Jan 2017, 14:30 last edited by Payx 1 Nov 2017, 14:32
i put my .h to see where i declared my scene
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPixmap> #include <QPoint> #include <QSize> #include <iostream> #include <QMapIterator> #include <QMap> #include <QDebug> #include <QGraphicsItem> #include <QGraphicsScene> namespace Ui { class MainWindow; } struct CostInfo { QString ImageName; int Cost; }; class MainWindow : public QMainWindow { Q_OBJECT public: QPixmap pixa; explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_push_clicked(); void on_push2_clicked(); void on_verticalSlider_sliderMoved(int position); void on_verticalSlider_actionTriggered(int action); private: Ui::MainWindow *ui; QGraphicsScene scene; QImage pixi; float k; int a; int z=1; int b; }; #endif // MAINWINDOW_H
it will work?
EDIT : It compile but my widow crashed when i run it and nothing happend
-
i put my .h to see where i declared my scene
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPixmap> #include <QPoint> #include <QSize> #include <iostream> #include <QMapIterator> #include <QMap> #include <QDebug> #include <QGraphicsItem> #include <QGraphicsScene> namespace Ui { class MainWindow; } struct CostInfo { QString ImageName; int Cost; }; class MainWindow : public QMainWindow { Q_OBJECT public: QPixmap pixa; explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_push_clicked(); void on_push2_clicked(); void on_verticalSlider_sliderMoved(int position); void on_verticalSlider_actionTriggered(int action); private: Ui::MainWindow *ui; QGraphicsScene scene; QImage pixi; float k; int a; int z=1; int b; }; #endif // MAINWINDOW_H
it will work?
EDIT : It compile but my widow crashed when i run it and nothing happend
wrote on 11 Jan 2017, 14:59 last edited by@Payx
you can use the debug mode to find out which line of code makes it crash.and I find that you declare two
scene
, one in theMainWindow
, one is global, and you did not use thescene
in theMainWindow
. -
wrote on 11 Jan 2017, 15:04 last edited by
ok but i keep just the scene in my .h but it tell me that scene isnt declared
-
wrote on 11 Jan 2017, 15:54 last edited by
Can someone put the topic as "solved" my problem isnt the same at the beginning i will create an other tread
-
You can do it, click on the "Topic Tools" button, you have there the "Mark as solved" entry.
-
wrote on 26 Mar 2023, 06:18 last edited byThis post is deleted!