我使用 wxScolledWindow 加载图像,然后在该图像上绘制形状。使用Fit选项加载图像,这意味着缩放级别根据图像的大小进行调整。我使用
wxBufferedPaintDC
并且已经使用SetBackgroundStyle(wxBG_STYLE_PAINT);
设置了背景样式。
问题是绘制形状(直线、矩形、椭圆...)或调整大小或围绕刷新移动它时不会发生,所以我最终得到了一张类似于下图的图:
我意识到问题主要发生在缩放级别不同于 100% 时。这幅画是用下面的一段代码完成的:
void CImageCtrl::OnPaint(wxPaintEvent& event)
{
if (!m_BMP.IsOk())
m_BMP = wxImage(m_Image.cols, m_Image.rows, m_Image.data, true);
wxBufferedPaintDC dc(this);
SetScale(m_ZoomVal, m_ZoomVal);
DoPrepareDC(dc);
dc.Clear();
dc.DrawBitmap(m_BMP, wxPoint(0,0));
for (const auto& shape : CActiveObj::GetObjects(this))
shape->Draw(&dc);
}
这里
m_BMP
是wxBitmap类型,m_Image
是cv::Mat类型。
擦除背景是:
void CImageCtrl::OnEraseBackground(wxEraseEvent& event)
{
event.Skip();
}
我也尝试了 wxAutoBufferedPaintDC,结果几乎相同(wxBufferendPaintDC 似乎工作得更好)。我想知道我可能会错过什么。