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

时间:2015-04-29 09:35:22

标签: c++ wxwidgets

我需要在面板上显示图像。我得到了这个工作。图像可以是任何类型,它必须支持缩放功能。我能够使用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();
} 

0 个答案:

没有答案