wxScrolledWindow 缩放刷新

问题描述 投票:0回答:0

我使用 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 似乎工作得更好)。我想知道我可能会错过什么。

c++ wxwidgets
© www.soinside.com 2019 - 2024. All rights reserved.