2016-07-02 8 views
0

私はwxWidgetsを使ってアニメーション円形ゲージを作るのに苦労しています。私はSVGイメージでwxSVGを使用しようとしましたが、ウィンドウで拡大縮小するのでLinux上で動作しましたが、Windowsでのそのライブラリのコンパイルはそのような問題でした。 私はwxArt2Dを使ってみましたが、Linuxでもコンパイルできませんでした。 今私はwxDCとwxImageを使用していますが、rescaleではリフレッシュせず、CPUのオーバーヘッドが大きくなります(ラップトップi7は約30%使用されます)。ここに私のコードは次のとおりです。wxWidgetsを使ったゲージ

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); 
} 

答えて

0

私はコードで明らかに間違っ何も表示されませんが、それぞれの再描画で画像を回転することは明らかに非常に高速であることを行っていない(彼らは大きなしている場合は特に)、あなたがしています最新のシステム上で既にダブルバッファーwxPaintDCをトリプルバッファリングする可能性が非常に高いです(ダブルバッファリングが確実に行われていることを確認している間に回避する方法や、余分なメモリDCを取り除く方法についてはwxAutoBufferedPaintDCを参照してください)あなたがそれらについて気にしないならば。

また、重大なパフォーマンス上の問題を抱えていない類似の処理を行う別の方法として、wxActivityIndicator implementationを参照することもできます。