[英]Gauge using wxWidgets
我正在努力使用wxWidgets制作動畫圓規。 我已經嘗試過將wxSVG與SVG圖像一起使用,以便可以隨窗口縮放,它可以在Linux上運行,但是在Windows下對該庫進行編譯是我退出該方法的問題。 我也嘗試過使用wxArt2D,但即使在Linux下也無法編譯。 現在,我正在使用wxDC和wxImage,但它不會在重新縮放后刷新,並且它具有較大的CPU開銷(筆記本電腦i7的使用率約為30%)。 這是我的代碼:
void MyFrame::OnPanel2EraseBackground(wxEraseEvent& event)
{
}
void MyFrame::OnPanel2Resize(wxSizeEvent& event)
{
wxSize panelSize = event.GetSize();
gaugeBuffer = gaugeImg.Scale(panelSize.GetX(), panelSize.GetY(), wxIMAGE_QUALITY_HIGH);
needleBuffer = needleImg.Scale(panelSize.GetX(), panelSize.GetY(), wxIMAGE_QUALITY_HIGH);
}
void MyFrame::OnPanel2Paint(wxPaintEvent& event)
{
wxPaintDC dc(Panel2);
wxPoint offset;
wxSize drawSize = dc.GetSize();
memDC.Clear();
temp = needleBuffer.Rotate((angle*M_PI/180), wxPoint((drawSize.GetX()/2), (drawSize.GetY()/2)), true, &offset);
memDC.DrawBitmap(gaugeBuffer, 0, 0);
memDC.DrawBitmap(temp, offset);
dc.Blit(0, 0, drawSize.GetX(), drawSize.GetY(), &memDC, 0, 0);
}
我沒有發現任何明顯的代碼錯誤,但是每次重繪時旋轉圖像顯然都不會很快(特別是如果它們很大),並且您很有可能在此處進行三倍緩沖(即任何現代系統已經雙緩沖的需要) wxPaintDC
,看到wxAutoBufferedPaintDC一種方式,以避免它同時仍能確保雙緩沖對舊系統進行,或只是刪除多余的內存DC,如果你不關心他們。
您也可以查看wxActivityIndicator實現 ,以做另一種類似的事情,而不會遭受任何嚴重的性能缺陷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.