C++ Wxwidget:添加具有缩放功能的图像

C++ Wxwidget:添加具有缩放功能的图像,c++,wxwidgets,C++,Wxwidgets,我需要在面板上显示一个图像。我让它工作了。图像可以是任何类型,并且必须支持缩放功能。我能够使用wxDC::SetUserScale()实现它。但此缩放是参照中心点进行的。我的问题是如何添加缩放功能,使其可以缩放图像面板中的任何位置,而不仅仅是中心 到目前为止,她是我的代码: wxImagePanel::wxImagePanel(wxFrame* parent, wxImage img) : wxPanel(parent) { image = img.Copy(); w = -1;

我需要在面板上显示一个图像。我让它工作了。图像可以是任何类型,并且必须支持缩放功能。我能够使用wxDC::SetUserScale()实现它。但此缩放是参照中心点进行的。我的问题是如何添加缩放功能,使其可以缩放图像面板中的任何位置,而不仅仅是中心

到目前为止,她是我的代码:

wxImagePanel::wxImagePanel(wxFrame* parent, wxImage img) :
wxPanel(parent)
{
    image = img.Copy();
    w = -1;
    h = -1;
    _factor = 0.25;
}

void wxImagePanel::paintEvent(wxPaintEvent & evt)
{

    wxPaintDC dc(this);
    render(dc);
}

void wxImagePanel::paintNow()
{
    wxClientDC dc(this);
    render(dc);
}

void wxImagePanel::render(wxDC&  dc)
{
    int neww, newh;
    dc.GetSize(&neww, &newh);
    dc.Clear();
    dc.SetUserScale(_factor, _factor);
    dc.DrawBitmap(image, 0, 0);
    Update();
}

void wxImagePanel::OnSize(wxSizeEvent& event)
{
    Update();
    Refresh();
    event.Skip();
}

void wxImagePanel::_onZoom(wxMouseEvent &event)
{
    _xOffset /= _factor;
    _yOffset /= _factor;
    if (event.GetWheelRotation() > 0){
        if (_factor >= 1.f){
            _factor += 0.5f;
        }
        else{
            _factor *= 2.f;
        }
    }
    else{
        if (_factor > 1.f){
            _factor -= 0.5f;
        }
        else{
            _factor /= 2.f;
        }
    }
    _xOffset *= _factor;
    _yOffset *= _factor;

    if (_xOffset > image.GetWidth()*_factor - GetSize().GetWidth()){
        _xOffset = image.GetWidth()*_factor - GetSize().GetWidth();
    }
    if (_yOffset > image.GetHeight()*_factor - GetSize().GetHeight()){
        _yOffset = image.GetHeight()*_factor - GetSize().GetHeight();
    }

    paintNow();
} 

尝试将
\u xOffset
\u yOffset
作为参数传递给
DrawBitmap
函数。您还必须添加一些线,以根据转动滚轮时的鼠标位置计算这些偏移量(您应该能够通过调用
event.GetLogicalPosition(wxClientDC(this))
,获得坐标,但我不是100%确定)。

@BenChaabenAssil第二次尝试:clip(的副本)使用
GetSubImage
方法创建图像