繁体   English   中英

wxWidgets + OpenCV:wxBitmap无法正确绘制wxImage

[英]wxWidgets + OpenCV: wxBitmap does not draw wxImage correctly

我正在尝试从cv::Mat原始数据中制作一个wxImage ,并使用wxBitmapwxPanel派生类(此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM