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



Recherche avancée
Statistiques
Membres inscrits :598

Membres en ligne : 0
Invités en ligne : 6
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» probleme ConvertToBitmap
Conversation (Résolue) : probleme ConvertToBitmap
15-07-2010 11:40:02  probleme ConvertToBitmap #1
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)

15-07-2010 11:57:45  Re: probleme ConvertToBitmap #2
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:

 
bmp=     new wxBitmap (zoomSymbole);


Sem
15-07-2010 13:33:22  Re: probleme ConvertToBitmap #3
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
15-07-2010 14:23:50  Re: probleme ConvertToBitmap #4
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)

15-07-2010 16:30:22  Re: probleme ConvertToBitmap #5
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
15-07-2010 16:59:12  Re: probleme ConvertToBitmap #6
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
16-07-2010 09:13:22  Re: probleme ConvertToBitmap #7
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
16-07-2010 09:30:59  Re: probleme ConvertToBitmap #8
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à...
16-07-2010 09:53:34  Re: probleme ConvertToBitmap #9
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
16-07-2010 18:34:21  Re: probleme ConvertToBitmap #10
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à...
19-07-2010 09:37:11  Re: probleme ConvertToBitmap #11
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)

19-07-2010 18:05:21  Re: probleme ConvertToBitmap #12
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à...
19-07-2010 18:41:31  Re: probleme ConvertToBitmap #13
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à...
20-07-2010 10:12:42  Re: probleme ConvertToBitmap #14
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
20-07-2010 22:15:30  Re: probleme ConvertToBitmap #15
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à...
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Utilisation générale wxWidgets
» probleme ConvertToBitmap