Membres inscrits :598
Membres en ligne : 0
Invités en ligne : 6


|
| Conversation (Résolue) : probleme ConvertToBitmap |
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Bonjour,
Je souhaite retailler un bitmap.
Donc voici la déclaration et l'initialisation
Code: wxImage *symbole, *zoomSymbole; wxBitmap *bmp; symbole= new wxImage (wxT("Symbole.gif"), wxBITMAP_TYPE_GIF, -1); zoomSymbole= new wxImage (); bmp= new wxBitmap (); Au cours de l'exécution, j'ai une méthode pour retailler l'image et la mettre dans le bitmap;
Code: zoomSymbole= symbole->Copy(); zoomSymbole->Resize(wxSize(zoomSymbole->GetWidth()/zoom,zoomSymbole->GetHeight()/zoom), wxPoint (0,0), -1, -1, -1); bmp= zoomSymbole->ConvertToBitmap(); Et à la compilation j'ai l'erreur : error: 'class wxImage' has no member named 'ConvertToBitmap'
Merci pour votre aide.
Yann
Dernière modification par yannp (15-07-2010 11:40:30)
| |
|
Sem (Membre)
Inscrit le : 31-05-2008
Messages: 64
Snippets: 0
Tutoriels: 0
Hors ligne |
bonjour, si tu veux construire une bitmap à partir d'un image, il existe un constructeur de wxBitmap qui va bien, voir ce lien.
Du style :
Code wxWidgets:
Sem
| |
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Merci,
mais en fait je ne veux pas le construire à chaque fois, je veux le redimensionner ...
Yann
| |
|
Sem (Membre)
Inscrit le : 31-05-2008
Messages: 64
Snippets: 0
Tutoriels: 0
Hors ligne |
bonjour, pk pas faire tout à la volé justement, je sais pas trop ce qui se passe entre ta déclaration et ton resize donc je fais en faisant propre :
Code wxWidgets: wxDELETE(bmp); // On efface éventuellement si y a déjà une image // Je récupère la taille de l'image sans zoom wxSize size = symbole.GetSize(); // Je vérifie que mon zoom n'est pas une valeur impossible if( zoom == 0 ) zoom = 1; // Je définie la nouvelle taille size = wxSize(size.GetWidth() / zoom, size.GetHeight() / zoom ); // Je recréé la bitmap directement à la taille souhaitée bmp = new wxBitmap(symbole.Size(size , wxPoint(0,0)));
je n'ai pas testé mais ca doit donné quelque chose comme ca en me basant sur ce que tu as donné, Sem
Dernière modification par Sem (15-07-2010 14:25:20)
| |
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Ok merci, ca marche .. Mais en fait je me suis trompé: je n'utilise pas resize mais rescale. Et c'est pour cela que je passe par wxImage. De plus je charge des .GIF pour avoir la transparence. Lors du resizing cette dernière disparaît (peut etre à cause du wxImage).
Pour clarifier : au départ, je stocke des images (avec la transparence) et je veux les agrandir ou les diminuer pour les afficher.
Merci de ton aide.
Yann
| |
|
Sem (Membre)
Inscrit le : 31-05-2008
Messages: 64
Snippets: 0
Tutoriels: 0
Hors ligne |
coucou, tu as essayé juste avec le Scale à la place du Size ?
Code wxWidgets: wxDELETE(bmp); // On efface éventuellement si y a déjà une image // Je récupère la taille de l'image sans zoom wxSize size = symbole.GetSize(); // Je vérifie que mon zoom n'est pas une valeur impossible if( zoom == 0 ) zoom = 1; // Je définie la nouvelle taille size = wxSize(size.GetWidth() / zoom, size.GetHeight() / zoom ); // Je recréé la bitmap directement à la taille souhaitée bmp = new wxBitmap(symbole.Scale(size));
pour la transparence, tu ne devrais pas la perdre si tu as bien chargé ton png, Sem
| |
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
En fait, je ne l'affiche pas directement, j'ai été obligé de creer une classe dérivée de wxStaticBitmap (pour gérer les événement de la souris)
Code: symboleMusical::symboleMusical (wxWindow *parent, wxWindowID id, wxPoint pos,wxBitmap &bmp, unsigned int argNoSymbole):wxStaticBitmap(parent,id,bmp,pos, wxSize (bmp.GetWidth(), bmp.GetHeight()), wxTRANSPARENT_WINDOW) J'ai essayé d'afficher un bitmap "directement" et dans ce cas il y a la transparence sinon avec ma classe dérivée de wxStaticBitmap ca ne marche pas.
Merci pour ton aide
Yann
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
Hello
yannp a écrit:En fait, je ne l'affiche pas directement, j'ai été obligé de creer une classe dérivée de wxStaticBitmap (pour gérer les événement de la souris) Les événements souris ne marchent pas si tu ne crées pas ta classe dérivée ? Il me semble bien avoir fait quelques essais à une époque, et je crois bien que ça marchait.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Mon objectif est de pouvoir gérer des bitmaps sur un wxScrolledWindow. Et je veux pouvoir faire des clicks droit et gauche sur les bitmaps, donc récupérer les évènements souris sur le bitmap ... Je ne sais pas si je suis très clair..
Merci pour ton aide.
Yann
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
yannp a écrit:Mon objectif est de pouvoir gérer des bitmaps sur un wxScrolledWindow. Et je veux pouvoir faire des clicks droit et gauche sur les bitmaps, donc récupérer les évènements souris sur le bitmap ... Je ne sais pas si je suis très clair.. Si, si, tu es très clair, et j'avais bien compris.
Je voulais juste dire qu'en fait, tu n'étais pas obligé de créer une classe dérivée de wxStaticBitmap pour intercepter les événements. Tu peux utiliser un wxStaticBitmap "classique", et le connecter dynamiquement (c'est à dire au moment de sa création) à une méthode de ta frame, ou de ta wxScrolledWindow
Voici le test que je viens de faire (code simplifié) :
Code wxWidgets:MyFrame::MyFrame(wxWindow *parent, const wxString& title) : wxFrame(parent, -1, title) { .......... // Création du wxStaticBitmap (la variable bmp est un wxBitmap initialisé avant) m_stBmp=new wxStaticBitmap(this, -1, bmp, wxPoint(20,20)); // Connexion du wxStaticBitmap à une méthode de la frame m_stBmp->Connect(wxEVT_RIGHT_UP, wxMouseEventHandler(MyFrame::OnRightUp), NULL, this); } // La méthode MyFrame::OnRightUp est une méthode tout à fait classique void MyFrame::OnRightUp(wxMouseEvent &event) { wxMessageBox(_T("Coucou !")); }
Sinon, fait-voir le code de ta classe dérivée, mais c'est bizarre que la transparence ne soit pas gérée.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Salut,
J'ai essayé, ça marche, mais je perds toujours la transparence... Voici le code :
Code Cpp: symbole= new wxImage (wxT("Symbole\\symbole1.gif"), wxBITMAP_TYPE_GIF, -1); wxImage *zoomSymbole= new wxImage(symbole->Copy()); // Je fais tout cela parce qu'au cours de l'exécution je serai amené à resizer le bitamp ....... wxDELETE (bmpSymbole); bmpSymbole= new wxBitmap (zoomSymbole->Rescale((symbole->GetWidth()*zoom)/40, (symbole->GetHeight()*zoom)/40, wxIMAGE_QUALITY_NORMAL ), wxBITMAP_TYPE_GIF); ........ // Creation de mon static bitmap bmpStartSymbole= new wxStaticBitmap (AffichagePartition, WINDOWS_1, *bmpSymbole, wxPoint (zoom+1, posY), wxSize (bmpSymbole->GetWidth(), bmpSymbole->GetHeight()), 0|wxTRANSPARENT_WINDOW, wxT("SYMBOLE_1")); Je pense que c'est le wxStaticBitmap qui ne gère pas la transparence même si j'ai rajouté wxTRANSPARENT_WINDOW. Il me semble qu'il y a un bug wxWidget concernant ce point. J'ai essayé aussi avec un .png, même résultat.
Sinon je ne vois qu'une solution : Créer une classe dérivée de wxPanel sur lequel je place un wxBitmap qui lui gère bien la transparence ...
Merci pour ton aide.
Yann
Dernière modification par yannp (19-07-2010 15:17:30)
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
Salut yannp a écrit:Je pense que c'est le wxStaticBitmap qui ne gère pas la transparence même si j'ai rajouté wxTRANSPARENT_WINDOW. Il me semble qu'il y a un bug wxWidget concernant ce point. J'ai essayé aussi avec un .png, même résultat. Effectivement, wxStaticBitmap ne gère pas la transparence. En fait, j'ai l'impression qu'il affiche bien l'image en gérant sa transparence, mais le contrôle lui-même n'est pas transparent. Ce qui fait que les zones transparentes de l'image sont affichées avec la couleur de fond du wxStaticBitmap.
yannp a écrit:Sinon je ne vois qu'une solution : Créer une classe dérivée de wxPanel sur lequel je place un wxBitmap qui lui gère bien la transparence ... Le wxPanel ne sera pas transparent, donc tu n'auras rien de plus.
Il faut à mon avis créer une classe de toute pièce (dérivée de wxEvtHandler).
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
C'est encore moi.
Moi a écrit:yannp a écrit:Sinon je ne vois qu'une solution : Créer une classe dérivée de wxPanel sur lequel je place un wxBitmap qui lui gère bien la transparence ... Le wxPanel ne sera pas transparent, donc tu n'auras rien de plus.
Il faut à mon avis créer une classe de toute pièce (dérivée de wxEvtHandler). J'ai encore dit une grosse c....... 
Tu peux t'inspirer de ce code. Tel qu'il est donné, il ne gère pas la transparence, mais avec un minimum de modifications, ça marche sans problème (j'ai testé avec une image png, et je vois le wxStaticText que j'ai place dessous).
Si tu as besoin d'un coup de main pour adapter le code, n'hésites pas.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
HELLO !!!!
Ok c'est cool ça marche ... Dommage d'être obligé de faire une classe ...Mais c'est nickel ..
Et encore merci pour ton aide A+ Yann
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
De rien
Si tu as fait une petite classe bien nickel, tu peux la poster comme snippet 
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
|