Dessiner sur une image : assez complexe
Bonjour, j'ai un besoin assez complexe :?et j'espere bien que c'est faisable en Qt:
j'affiche une image dans un QLabel ; et je voudrais créer une methode qui me permettra quand j'active un bouton que je puisse cliquer avec la souris sur l'image et chaque point cliquer doit devenir rouge!ou meme mettre toute une ligne sur l’image en rouge !
J'ai essayer avec QPainter que j'ai jamais utiliser mais ça marche pas!
Si vous pouvez m'aider svp?
Voici une petite idée que j'ai de la methode:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| void Maclass::CrerPointRouge(QObject *obj, QEvent *ev)
{
QPainter singlePoint ;//Pour pouvoir dessiner le point rouge!
QLabel *label = qobject_cast<QLabel *>(obj) ;
if (label && ev->type() == QEvent::MouseMove)
{
QMouseEvent * mouseEvent = static_cast<QMouseEvent *>(ev) ;
if(mouseEvent->KeyPress) //A chaque fois qu'on clique sur l'image!
{
singlePoint.drawPoint(mouseEvent->x(), mouseEvent->y()) ;//Pour relier la position de la souris avec le pixel cliqué
//Pour rendre le point cliqué en rouge j'ai pensé à faire ça mais ça marche pas , enfin c'est n'importe quoi:oops:
//img = m_label->pixmap()->toImage().setPixel(mouseEvent->x(), mouseEvent->y(), QRgb(255,0,0)) ;
}
}
} |
Manipulation de buffer et clique souris
Bonjour, je vous expose mon probléme: j'affiche une image et j'affiche tous les pixels differents de 0 en rouge.et Je voudrais que à chaque clique de ma souris sur l'image qu'il me met ce pixel cliqué en rouge.Je procede comme suit: à chaque clique sur mon image, je remplit les coordonnées du pixel cliqué par 1 et je reaffiche l'image avec le nouveau buffer en ecrasant l'ancienne image!C'est l'idée que je veux developper, mais ça marche pas car ça me mets toute l'image en rouge ou ça m'affiche une image assez bizarre!!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| void Maclass::mousePressEvent(QMouseEvent *event)
{
QImage img(1500, 1800, QImage::Format_RGB32) ;
float min = 1582 ;
float max = 1582.2 ;
if (event->button() == Qt::LeftButton)
{
int PosX = event->x() ;
int PosY = event->y() ;
int x, y;
for(y = 0; y < 1000; y++)
{
for(x = 0; x < 1000; x++)
{
if(event->button() == Qt::LeftButton)
{
BufferImage[PosX + PosY * NbColonnes] = 1 ;
}
if(BufferImage[x + y * NbColonnes] == 0)
{
float pixel = 255 *(BufferImage[x + y * NbColonnes] ) - min)
/(max- min) ;
img.setPixel(x, y, qRgb(pixel, pixel, pixel)) ;
}
else
{
img.setPixel(x, y, qRgb(255, 0, 0)) ;
}
}
}
} |
Mon gros probléme c'est comment mettre à 1 un pixel de l'image par simple clique de la souris?c'est à dire recupere les coordonnées du pixel cliqué dans l'image et mettre ce pixel à 1 dans le buffer de l'image??
Code:
1 2 3 4 5 6 7 8
|
int PosX = event->x() ;
int PosY = event->y() ;
if(event->button() == Qt::LeftButton)
{
BufferImage[PosX + PosY * NbColonnes] = 1 ;
} |
Est ce que ça me mets le pixels cliqué à 1 au niveau du buffer?
Merci d'avance