【问题标题】:Wxwidget : Add image with zooming featureWxwidget : 添加具有缩放功能的图像
【发布时间】:2015-04-29 09:35:21
【问题描述】:

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

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

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

    【讨论】:

    • @BenChaabenAssil 第二次尝试:使用GetSubImage 方法剪辑(复制)图像
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多