我试图绘制一张简单的图片并将其保存到wxwidgets中的文件中。这是我到目前为止的代码。但是,此代码永远不会创建test.png图片。
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);
有人可以帮我解决我做错了什么...... /麦克
答案 0 :(得分:4)
首先提出一条一般性建议:使用wxWidgets的调试版本,每当你做错了什么时它都会断言。
首先调用默认的wxBitmap
构造函数,从而生成一个无法按原样使用的对象。如果您将第一行更改为
wxBitmap myBitmap(200, 200);
您将创建一个200像素宽度和高度的位图,实际上可以选择直流并绘制。或者,您可以在使用位图之前调用wxBitmap::Create()
。
另外,为了保存为PNG文件,您需要先注册PNG图像处理程序(请参阅wxImage
documentation)。通过调用::wxInitAllImageHandlers()
来注册所有默认图像处理程序可能是最简单的。
最后,您需要确保当前目录下有一个子目录 images 。或者使用带有绝对路径的文件名。但是,如果保存位图失败,您将在运行时获得一个消息框。
答案 1 :(得分:0)
在保存之前,您可能需要从DC取消选择位图:
dc.SelectObject(wxNullBitmap);
myBitmap.SaveFile(test, wxBITMAP_TYPE_PNG);
答案 2 :(得分:-1)
首先我会检查对SaveFile的调用的返回,如果它返回true则它应该成功,否则在其他地方出现故障。
其次尝试提供一个完整的路径而不仅仅是images / test.png,因为它取决于你的程序的当前工作目录,它可能不会把文件放在你认为应该的位置。
答案 3 :(得分:-1)
更新
"测试" =图像输出名称。
" png格式"图像输出扩展
" wxBITMAP_TYPE_PNG" = wxBitmap图像类型。有关类型的更多说明,请参阅:http://docs.wxwidgets.org/trunk/gdicmn_8h.html#a90a1eb6d85b5044a99b706fd979f27f5。
" SAVEFILE" = wxBitmap保存文件。
" wxBitmap myBitmap;" =示例中的变量。
" wxString myPath(wxGetCwd());" = varibale wxString等价物:" wxstring myPath; myPath = wxGetCwd();返回myPath变量中app文件夹的路径。 wxString myPath是变量类型wxString wxGetCwd()返回路径app文件夹。 wxString myPath(wxGetCwd());是myPath变量中app文件夹集的路径!
示例完成:
wxString myPath(wxGetCwd());
wxBitmap myBitmap;
myBitmap.SaveFile(localAtual + wxT("//test.png"), wxBITMAP_TYPE_PNG);