How to include .txt on Qt
-
Hi
I move the code around so it compiled here.
https://www.dropbox.com/s/1z7lzjk4fqwxslz/mycolortest.zip?dl=0
Also change QMapIterator to a for each loop to get rid of QMapIterator.If you get any errors from this it, please list them exactly.
-
Well since you know what function it is, simply set a break point and single step through the code.
That way it will clearly show what line it crashes on. ;) -
I placed breakpoint on
for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y) { image.setPixelColor(x, y, colour); foreach( QRgb key, Costs.keys() ) { QColor BaseColor( key ); if (Costs.contains( colour.rgb() ) || IsCloseColor(BaseColor, colour) ) { CostInfo& ci = Costs[colour.rgb()]; int Cost = ci.Cost; QPixmap pix( ci.ImageName ); }
because its new and before it worked.
And nothing who looks like a crash happened. So i don't understand, maybe it is just a big picture (540 * 540) and the app have difficult to do the code
EDIT : i tried to increase the rectangle size, it worked.
but dont replace the color by a picture
and it say that int cost is an unused variable
-
Hi
In the inner
CostInfo& ci = Costs[colour.rgb()];
int Cost = ci.Cost; // not used for anything
QPixmap pix( ci.ImageName ); // not used for anything
}it was just for getting the data from the Costs qmap.
You still need to code what ever you want to do with it :)
Currently it just check if color is a match and even if yes, then nothing. -
so if i understood well
int Cost = ci.Cost; /// the Cost in my Qmap
QPixmap pix( ci.ImageName ); /// the picture into a PixmapThe problem is that the rectangle that i use to calcul the DominantColor isn't a Label or something, so how can i replace a picture into a virtual rectangle ?
-
@Payx
Yes those are the values from the qmap.- so how can i replace a picture into a virtual rectangle
Sorry but Im not sure what kind of operation you want to do.
For each dominĂ¡nt color for an area. you want to paint all of that area
with this color? Like paint 0,0,40,40 with same color. ? -
My program already do that :
but what i want is that for each rectangle that my picture have, it will replace this rectangle of color by a picture in my QMap (like if the rectangle's color is near the red, it will replace by the picture fraise.png and add a Cost)
-
@Payx
You mean that the red squares would be pictures instead?
The painter has drawPixmap
http://doc.qt.io/qt-5/qpainter.html#drawPixmap
You can fit the image to the rect. -
All square would be picture, the picture depends of the color.
If its red we see in the QMap that the picture is fraise.png
if its green -> balle verte.pngi think i dont need "QRectF target" or "source"
because i have already this
for(int x = topLeft.x(); x < maxX; ++x) { for(int y = topLeft.y(); y < maxY; ++y)
when im on the for i'm already in the square.
-
ok. that sounds fine.
I assume you need to scale the pictures down to fit in the
area. ?
You can use scaled function.QPixmap scaledPix = pix.scaled( WIDTH, HEIGHT Qt::KeepAspectRatio, Qt::SmoothTransformation ); painter.drawPixmap(QPoint(), scaledPix);
-
No, you will have to resize it, else it will be exactly as in the file.( I assume too big)
the scaled function returns a copy of the pixmap that is scaled to
WIDTH, HEIGHT. so it will fit in your area. -
Yes , that should draw image as 8x8 at i,j.
Note the flag Qt::KeepAspectRatio which means it might not be 8x8 directly but
maybe 8x6 if the original images was not square. AspectRatio means keep the relation between height and width. -
@ambershark Lol
I prefer learn instead of just don't understand what i'm doing, i know i'm very bad to programmation by now but maybe in few years i'il be like mrjj haha !
for the QPoint, i use it here :
void MainWindow::on_push2_clicked() { for (int i=0;i<pixi.width();i+=z){ for (int j=0;j<pixi.height();j+=z){ k=k+0.06; Remplissage(pixi,QPoint(i,j),QSize(z,z),Couleurdominante(pixi,QPoint(i,j),QSize(z,z))); } }
but i use the QPixmap scaledPix .....
in my functionvoid Remplissage(QImage& image, const QPoint& topLeft, const QSize& rectangle, const QColor& colour) {
so it tell that j and i was not declared in this scope
so i declared i and j in my .h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPixmap> #include <QPoint> #include <QSize> #include <iostream> #include <QMapIterator> #include <QMap> namespace Ui { class MainWindow; } struct CostInfo { QString ImageName; int Cost; }; int j; int i; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget* parent = 0); ~MainWindow(); private slots: void on_push_clicked(); void on_push2_clicked(); void on_verticalSlider_sliderMoved(int position); private: Ui::MainWindow* ui; QImage pixi; QPixmap pixa; float k; int a; int z = 1; int b; }; #endif // MAINWINDOW_HH
it will work?
//
it tell that painter was not declared too, so i search to the QPainter class,
it's "void QPainter::drawPixmap(const QPoint & point, const QPixmap & pixmap)" that i should use ?