C++ 如何重新分配wxImage指针
我试图在wxWidgets中创建一种图像编辑器,并将图像加载并存储在wxImage指针中。当用户单击一个按钮时,它会删除指针并再次将其分配给一个新的wxImage。我使用的代码如下所示C++ 如何重新分配wxImage指针,c++,pointers,wxwidgets,new-operator,delete-operator,C++,Pointers,Wxwidgets,New Operator,Delete Operator,我试图在wxWidgets中创建一种图像编辑器,并将图像加载并存储在wxImage指针中。当用户单击一个按钮时,它会删除指针并再次将其分配给一个新的wxImage。我使用的代码如下所示 class MyFrame : public wxFrame { wxImage *old_image; void OnLoad(wxCommandEvent &event); }; void MyFrame::OnLoad(wxCommandEvent &event) { // G
class MyFrame : public wxFrame {
wxImage *old_image;
void OnLoad(wxCommandEvent &event);
};
void MyFrame::OnLoad(wxCommandEvent &event) {
// Get the image path with wxFileDialog and read it.
wxImage *new_image = new wxImage(new_width,
new_height,
image_data);
// old_image->Destroy(); // I think this also work
delete old_image;
old_image = new_image;
}
我知道代码在我第一次加载新映像时就可以工作,但在第二次加载时它会挂起并使应用程序崩溃。所以我认为错误不在加载算法中
我如何删除wxImage?
还是有更可靠的方法来改变图像
我正在使用wxWidgets 3.0.5,MinGW-w64和gcc 8.0.1,通过该构造函数,
wxImage
将拥有image\u数据
并在删除时释放它。为了重用它,您必须将true
传递给第四个参数(static_data
,请参阅文档)。您是否有硬件崩溃或断言?我认为这是一个崩溃,因为没有消息,应用程序就像通过Ctrl+COk关闭一样关闭,我做了更改,但问题仍然存在,应用程序挂起并自行关闭。我也尝试过使用SetData(),但没有成功。您可能应该显示更多的代码,即您正在使用的image\u data
。实际上,image\u data
是OpenCV生成的一个unsigned char*
,但OpenCV的唯一目标是生成该数据,并且该数据仅在MyFrame::Onload()时使用
将其加载到wxImage
中,但信息仍然不足。OpenCV可能应该将其处理为无符号字符**
——是吗?或者,生成的数据并不总是new\u width
xnew\u height
。如果只使用第一次迭代中的数据,它是否继续显示初始图像?否,OpenCV使用数据作为cv::Mat
,我使用OpenCV函数获取一个无符号字符*
,供wxWidgets使用。不,它不工作,如果我加载相同的图像,它也会崩溃。OpenCV返回和读取的所有图像数据的大小始终相同,我已经验证并检查了好几次。