Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Coordinate sbagliate
Forum - C/C++ - Coordinate sbagliate

Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 11:23
Sabato, 25/02/2017
Buongiorno è da poco che ho messo mano al C++ con il framework Qt.
Mi sembra bello potente e performante.

Ho una paio di domande da porre.

Sto usando come strumento di grafica il Pixmap.
Volevo alcuni chiarimenti su questo componente, Il draw sul Pixmap è paragonabile a quello del C#
o più potente?

Sul C# quando utilizzavo le GDI avevo un rallentamento pazzesco su immagini di grosse dimensioni.



Sto provando a fare un piccolo programmino di esempio.
per disegnare delle immagini ritagliate i determinate posizioni

Codice sorgente - presumibilmente C/C++

  1. struct ElementPost
  2. {
  3.     QRect ElementPos;
  4.     QPixmap imagedata;
  5. };
  6.  
  7. QList<ElementPost *> elements;
  8.  
  9.  
  10. void mapeditor::mousePressEvent(QMouseEvent *mouse_event)
  11. {
  12.     if(mouse_event->button() == Qt::LeftButton)
  13.     {
  14.         ElementPost *ps = new ElementPost;
  15.         ps->ElementPos = QRect(mouse_event->x(),mouse_event->y(),32,32);
  16.         ps->imagedata = imagedata;
  17.         elements.append(ps);
  18.  
  19.     }
  20.  
  21. }




Override del metodo paint su oggetto

Codice sorgente - presumibilmente Plain Text

  1. //Draw Element
  2.     for(int i = 0; i < elements.count(); i++)
  3.     {
  4.  
  5.         p.drawPixmap(elements[i]->ElementPos.x() / blw * blw, elements[i]->ElementPos.y()/blh*blh,blw,blh,this->imagedata,elements[i]->ElementPos.x()/blw*blw,elements[i]->ElementPos.y()/blh*blh,blw,blh);
  6.  
  7.     }




Il risultato è che ottengo ciò


https://s21.postimg.org/qfzopfyhj/Cattura.png


A sinistra ho un set di elementi divisi a griglia
come notate se ci clicco sopra, mi prende correttamente il pezzo e lo visualizza a destra
dove poi sarà l'utente a piazzarlo.

Ma con quella riga che ho fatto nel ciclo for, qualcosa non quadra

https://s16.postimg.org/yocdm96md/Cattura.png

dal momento che vado e premere a destra mi aggiunge i vari elementi e coordinate nella lista
solo che anziché disegnarmi il prezzo preso dalle coordinate del pannello a sinistra mi va a ritagliare
le i vari pezzi prendendo blocchi di immagini diverse.

dove sbaglio? 8-|


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:56
Domenica, 26/02/2017
Testo quotato

Postato originariamente da Thejuster:
Volevo alcuni chiarimenti su questo componente, Il draw sul Pixmap è paragonabile a quello del C#
o più potente?



Non so se la domanda ha molto senso... potente in senso di velocita', funzionalita', ... C# poi e' un linguaggio, non ha niente a che fare con la grafica. Forse intendevi un confronto tra Pixmap e GDI? Sinceramente non saprei in termini di prestazioni, potresti fare qualche benchmark e confrontare i risultati.


Testo quotato


dove sbaglio? 8-|



A giudicare dalla chiamata, direi che i parametri di drawPixmap non sono corretti...

drawPixmap(int x, int y, const QPixmap & pixmap, int sx, int sy, int sw, int sh)
Codice sorgente - presumibilmente Plain Text

  1. x = elements[i]->ElementPos.x()
  2. y = elements[i]->ElementPos.y()
  3. pixmap = this->imagedata
  4. sx = elements[i]->ElementPos.x()
  5. sy = elements[i]->ElementPos.y()
  6. sw = blw
  7. sh = blh



Da dove viene this->imagedata? Forse intendevi elements[ i]->imagedata? In tal caso e' probabile che x e y, o sx e sy devono essere aggiustati... rileggi la definizione di drawPixmap su http://doc.qt.io/qt-4.8/qpainter.html#drawPixmap-11 e magari con carta e penna visualizza i diversi elementi e etichetta le varie coordinate.


Ultima modifica effettuata da pierotofy il 26/02/2017 alle 17:56


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 17:06
Mercoledì, 01/03/2017
Ho risolto grazie per le info piero.

Il problema era principalmente tutto il sistema che avevo fatto.
Prendevo le coordinate si, ma in modo sbagliato.

Ho deciso quindi di includere nell'header del mapeditor quello del Tilepicker
in modo da poter recuperare l'ultima posiziona croppata ed al momento del click aggiungere le varie coordinate.

https://s18.postimg.org/appb1eavd/Immagine.png

Ultima modifica effettuata da Thejuster il 01/03/2017 alle 17:07


PM Quote