[英]wxWidgets + OpenCV: wxBitmap does not draw wxImage correctly
我正在尝试从cv::Mat
原始数据中制作一个wxImage
,并使用wxBitmap
在wxPanel
派生类(此bmImage
类)上绘制出它。
这是将cv::Mat
数据加载到wxImage
。
cv::Mat asCvMat = cv::imread("something.png", 1);
cv::imshow("preview", asCvMat);
cv::Mat cvtResult;
aswxImage = wxImage(asCvMat.cols, asCvMat.rows, asCvMat.data, true);
wxLogMessage(wxT("%s"), std::string((char*)asCvMat.data));
这是绘制wxBitmap
的代码。
void bmImage::render(wxDC& dc) {
wxBitmap bitmap = wxBitmap(aswxImage);
dc.DrawBitmap(bitmap, wxPoint(0, 0), false);
}
左边的小图像是我尝试加载并用cv::imshow
显示的图像,而右边的小图像是生成的wxBitmap
。 它无法正确显示图像。 我该如何解决才能正确显示图像?
另外,令我困惑的是asCvMat.data
的(空)值。 这是否意味着wxImage()
已完成wxImage()
加载所有像素数据,从而到达末尾( \\0
)?
编辑
cv::Mat asCvMat = cv::imread("something.png", 1);
cv::imshow("preview", asCvMat);
void *mdata = malloc((size_t)(asCvMat.dataend - asCvMat.datastart));
std::memcpy(mdata, asCvMat.data, (size_t)(asCvMat.dataend - asCvMat.datastart));
cv::Mat cvtResult;
aswxImage = wxImage(asCvMat.cols, asCvMat.rows, (unsigned char*)mdata, false);
wxLogMessage(wxT("%s"), std::string((char*)mdata));
但这是一回事...如果加载大图像,有时会引发未处理的内存异常。
您确定cv::Mat
数据的格式为wxImage
的格式,即没有任何交错的简单RGB吗?
另外,您如何精确地调用render()
? 您不能/不应该直接调用它,它是从wxEVT_PAINT处理程序中调用的吗?
解决方案:
sizer_to_contain_image->Add(image, 1, wxEXPAND);
和:
sizer_containing_image->SetSizeHints(frame_containing_sizer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.