wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 7

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» probleme de rotation wxImage
Conversation : probleme de rotation wxImage
18-05-2008 19:35:55  probleme de rotation wxImage #1
zeneuneu (Nouveau membre)
Inscrit le : 18-05-2008
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
Bonjour,

j'ai une image que je doit faire pivoter.

Ca marche bien a l'ecran quand j'utilise un   wxPaintDC dc;
mais mon appli doit imprimer ces images. Je passe dont par une fontion dans
un wxPrintout et mon dc devient
wxDC dc;
dc= GetDC();

et là, mon image devient noire sur les 4 coins. La transparence n'est plus gerée correctement.
mon code est du style:

Code wxWidgets:

 
 
OnInit() {
// ca marche a l'ecran
// image pivotée de 45 ° pour essai
    img.LoadFile(wxT("duck.png") , wxBITMAP_TYPE_PNG );
    img1=img.Rotate(45 * PI/180, wxPoint(img.GetWidth()/2, img.GetHeight()/2), true);
};
 
void wxmpanel::OnPaint(wxPaintEvent &event)
{
    wxPaintDC dc(this);
 
    dc.DrawBitmap(img, 100, 50, true);
    dc.DrawBitmap(img1, 100, 100+img.GetHeight(), true);
};
 
// ca marche pas dans le wxPrintout
 
mon_wxPrintout::dessinne_moi_cette_putaint_dimage()
{
    wxDC *dc; // memoryDC ou postscriptDC d'apres la doc wx
 
     dc = GetDC();
// ../.. toute l'init de mise a l'echelle
 
    dc.DrawBitmap(img, 100, 50, true);
    dc.DrawBitmap(img1, 100, 100+img.GetHeight(), true);
 
}
 
 


la seule difference dans les 2 cas est le type de dc.

quelqu'un a deja eu ce probleme ? et sourtout la solution?
merci

maintenant je passe la meme chose
----------
rotation d'image dans un wxPrintout

Dernière modification par zeneuneu (18-05-2008 19:41:27)

18-05-2008 22:33:39  Re: probleme de rotation wxImage #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1390
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut, et bienvenue.

Je confirme le problème (mais je n'ai pas (encore) la solution).

Je pense que ça doit venir du wxPrinterDC, car avec un simple wxMemoryDC, la transparence est bien gérée.
Je m'explique :
J'utilise le même genre de méthode "OnPaint" que toi (elle fait un DrawBitmap au centre de la fenêtre concernée).
J'appelle ensuite une méthode "test" depuis les menus qui fait la chose suivante :
- Création d'un wxBitmap en mémoire ayant la taille de l'image tournée.
- Sélection de ce wxBitmap dans un wxMemoryDC
- Remplissage du wxBitmap avec DC::DrawRectangle()
- Dessin de l'image sur ce wxBitmap avec DrawBitmap()
- Ré-initialisation de l'image avec ce nouveau wxBitmap
Voici le code (m_img1 correspond à l'image tournée à 45°):

Code wxWidgets:

 
wxBitmap newBmp(m_img1.GetWidth(),m_img1.GetHeight());
wxMemoryDC mdc(newBmp);
mdc.SetPen(*wxWHITE_PEN);
mdc.SetBrush(*wxWHITE_BRUSH);
mdc.DrawRectangle(0,0,m_img1.GetWidth(),m_img1.GetHeight());
mdc.DrawBitmap(m_img1,0,0,true);
mdc.SelectObject(wxNullBitmap);
m_img1=newBmp.ConvertToImage();


Et pour info, le problème ne vient pas du fait que l'image ait été tournée, car avec l'image d'origine, ça fait pareil : quand on la dessine avec DrawBitmap depuis un wxPrintout en vue de l'envoyer à une imprimante, les parties "transparentes" apparaissent en noir.

@+
----------
Sur le forum officiel anglais, ce problème a été abordé :
http:/wxforum.shadonet.com/viewtopic.php?t=17552

Apparemment, c'est un problème spécifique à Windows (et à sa façon de gérer les DC pour l'impression).

Ce que tu peux essayer de faire, c'est créer un wxBitmap en mémoire ayant la taille de la zone d'impression, le remplir en blanc (comme j'ai fait dans le code ci-dessus), dessiner ta ou tes images dessus, et à la fin, faire un drawbitmap sur le printerdc.

Bonne chance, et @+
Xav'

Dernière modification par Xaviou (18-05-2008 22:43:27)


Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà... et effectivement, depuis le temps, ce n'est plus tellement nouveau....
18-05-2008 23:13:53  Re: probleme de rotation wxImage #3
zeneuneu (Nouveau membre)
Inscrit le : 18-05-2008
Messages: 3
Snippets: 0
Tutoriels: 0
Hors ligne
Merci de la reponse.

J'ai repris mon bazard.
Si je passe par un wxPreview tout est bon a l'ecran , pas a l'impression, alors que par le
wxPrintout c'est tout de suite mauvais a l'ecran.
j'ai egalement posté a http://wxforum.shadonet.com/viewtopic.php?t=19445
dans l'espoir d'une reponse.

Je tourne sous linux/gnome. Normalement le wxPrintout doit me passer soit un wxMemoryDC, soit un
wxPostcriptDC. Dont apparement ca n'a lair de fonctionner que pour un PaintDC tant pour MSW que linux.

si je trouve, je poste mais je crains le pire. ca sent la solution lourdissime !!!

@+
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» probleme de rotation wxImage