2010-03-31 2 views
2

Je tente de dessiner une image simple et de l'enregistrer dans un fichier dans wxwidgets. C'est le code que j'ai jusqu'ici. Cependant, ce code ne créera jamais l'image test.png.wxwidgets saveFile

wxBitmap myBitmap; 
    wxMemoryDC dc; 
    dc.SelectObject(myBitmap); 
    wxFont font=dc.GetFont(); 
    font.SetPointSize(15); 
    dc.SetTextForeground(*wxBLACK); 
    dc.DrawRectangle(0,0,50,100); 
    wxString s(_T("A")); 
    dc.DrawText(s, 5,5); 
    wxString test(_T("images/test.png")); 
    myBitmap.SaveFile(test, wxBITMAP_TYPE_PNG); 

quelqu'un peut me aider s'il vous plaît dans ce que je fais mal ... /Mike

Répondre

-1

Tout d'abord, je voudrais vérifier le retour de l'appel à SaveFile, si elle retourne vrai, alors il devrait être réussir, sinon il y a un échec ailleurs. Deuxièmement, essayez de donner un chemin complet plutôt que simplement images/test.png car, selon le répertoire de travail actuel de votre programme, il se peut qu'il ne place pas le fichier à votre convenance.

5

Tout d'abord un conseil général: Utilisez la version de débogage de wxWidgets, il va souvent affirmer chaque fois que vous avez fait quelque chose de mal.

D'abord, vous appelez le constructeur wxBitmap par défaut, ce qui entraîne un objet qui ne peut pas être utilisé tel quel. Si vous changez votre première ligne à

wxBitmap myBitmap(200, 200); 

vous à la place créer un bitmap de 200 pixels de largeur et de hauteur, ce qui peut effectivement être choisi dans le courant continu et être peint sur. Vous pouvez également appeler le wxBitmap::Create() avant d'utiliser le bitmap.

De même, pour enregistrer en tant que fichier PNG, vous devez d'abord enregistrer le gestionnaire d'images PNG (voir le wxImage documentation). Il est probablement plus facile d'enregistrer tous les gestionnaires d'image par défaut en appelant le ::wxInitAllImageHandlers().

Enfin, vous devez vous assurer qu'il y a un sous-répertoire images sous votre répertoire actuel. Ou utilisez un nom de fichier avec un chemin absolu. Vous obtiendrez cependant une boîte de message lors de l'exécution si la sauvegarde de l'image a échoué.

-1

Mise à jour:

"test" = image Sigle de sortie.

".png" sortie d'image extention

"wxBITMAP_TYPE_PNG" = type d'image wxBitmap. voir: http://docs.wxwidgets.org/trunk/gdicmn_8h.html#a90a1eb6d85b5044a99b706fd979f27f5 pour plus d'explications sur les types!

"SaveFile" = fichier de sauvegarde wxBitmap.

"wxBitmap myBitmap;" = variable dans votre exemple.

"wxString myPath (wxGetCwd());" = varibale wxString équivalent: "wxstring myPath; myPath = wxGetCwd(); Renvoie le chemin du dossier de l'application dans la variable myPath.wxString myPath est une variable de type wxString wxGetCwd() dossier du chemin de retour de l'application wxString myPath (wxGetCwd()); pour le dossier app fixe dans la variable myPath

exemple complet:

wxString myPath(wxGetCwd()); 
wxBitmap myBitmap; 
myBitmap.SaveFile(localAtual + wxT("//test.png"), wxBITMAP_TYPE_PNG); 
+0

Si vous deviez ajouter un peu d'explication, cela rendrait votre réponse plus précieuse. –

+0

mettre à jour la réponse! :) –

0

vous devrez peut-être désélectionner le bitmap du DC avant de l'enregistrer aussi:

dc.SelectObject(wxNullBitmap); 
myBitmap.SaveFile(test, wxBITMAP_TYPE_PNG);