2011-05-24 18 views
0

可能是一個糟糕的標題,但我正在一個winforms應用程序,這一切都進展順利,直到我開始做不同大小的可用性測試。winforms應用程序 - 最好的方式來處理圖像的性能

我注意到resize事件上控件的「重繪」會非常緩慢。我搜索了一下,發現splitcontainers和dockstyle填充效果不好,所以我改變了我的方法,並且性能提高了,但速度仍然很慢。

原來我在我的usercontrols背景圖片造成了延遲,它讓我想知道這是什麼最佳做法?我有幾個不同的漸變,大約1024x768,設置爲大小模式拉伸。

我的臨時修復是用純黑替換我漂亮的漸變背景。但是這並不能讓事情看起來很好。看起來,如果我有兩個不同大小的背景圖像,並將它們交換到form_resize上,這將是最有效的,但是有很多時候我以困難的方式執行操作,因爲我不知道更好。所以我想我會在這裏問。這隻針對winforms。我可以爲我的wpf/sl文件輸出矢量。

+0

爲什麼你們的梯度1024x768的?你有沒有試過讓它們像16x16或什麼的? – jv42 2011-05-24 14:44:05

+0

我將其大小調整爲16x12px,並將其設置爲拉伸的背景圖像。它仍然閃爍,並且重繪我的兩個數據網格並排重疊非常緩慢。 – TWood 2011-05-24 14:49:20

+0

太糟糕了,希望它會有所幫助。 – jv42 2011-05-24 15:28:55

回答

0

漸變圖像是否非常具體?如果它只是一個線性漸變,你不能自己畫背景嗎?

在用戶控件,添加一個OnPaint覆蓋,像這樣:

protected override void OnPaint(PaintEventArgs e) 
    { 
     Brush brush = new LinearGradientBrush(
      Point.Empty, 
      new Point(0, this.Height), 
      Color.Yellow, 
      Color.Green); 

     e.Graphics.FillRectangle(
      brush, e.ClipRectangle); 
    } 
+0

我會嘗試這個和更新,但我試圖保持2.0框架項目(可能應該提到),我很確定lineargradientbrush出現在3.5 sp1。 – TWood 2011-05-25 18:46:48

+0

@TWood從1.0開始,它就已經在.net中,因此使用起來很安全。祝你好運! – 2011-05-25 18:54:53

+0

埃德溫,你的例子真的很有幫助。我必須在對象創建期間調用它以獲得最佳的運行時重新繪製性能:SetStyle(ControlStyles.AllPaintingInWmPaint或ControlStyles.DoubleBuffer或ControlStyles.ResizeRedraw或ControlStyles.UserPaint,True) – TWood 2011-06-16 18:01:54

0

嘗試使用漸變將BackgroundImageLayout屬性設置爲「無」。這通常會提供適度的性能提升

+0

那麼我會需要一個巨大的超大梯度呢?我正在使用拉伸,因爲它允許我在所有尺寸下使用相同的漸變。我只是將我的漸變設置爲3300x2800,而backgroundimagelayout設置爲無。不幸的是,這並沒有多大改變。 – TWood 2011-05-24 14:50:34

相關問題