2015-04-29 62 views
0

我需要在面板上顯示圖像。我得到了這個工作。圖像可以是任何類型,並且必須支持縮放功能。我能夠使用wxDC :: SetUserScale()來實現它。但是這個縮放是參考中心點。我的問題是我如何添加縮放功能,可以放大圖像面板中的任何位置,而不僅僅是中心。Wxwidget:添加具有縮放功能的圖像

她是我到目前爲止的代碼:

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

請任何幫助 –

回答

0

嘗試通過_xOffset_yOffset作爲參數傳遞給DrawBitmap功能。您還需要添加一些線來根據輪子轉動時的鼠標位置計算這些偏移量(您應該能夠通過調用event.GetLogicalPosition(wxClientDC(this))來獲得座標,但我不是100%確定的)。

+0

試試,但沒有奏效。無論如何,謝謝。 –

+0

@BenChaabenAssil第二次嘗試:用「GetSubImage」方法剪切圖像(的副本) –

相關問題