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