2011-06-20 29 views
2

我有一個WPF 3D應用程序(C#.NET 4.0),它具有很多3D幾何圖形。現在我需要通過應用紋理來着色這些幾何圖形。的紋理源是一個大的.PNG文件如下所示:要使用哪種WPF畫筆以及如何創建它

Example of resultsfile

的.PNG文件包含重複部分。一個部分適用於Case,Deviation和Harmonic的每種組合。案件有一個或多個偏差(nDev)。案例也有一個或多個諧波(nHarm)。所以部分的數量等於每個Case的nDev * nHarm的總和。

一節中的每一行像素只映射到一個幾何圖形。

enter image description here

終端用戶應該能夠選擇的情況下(組合框槽),偏差(槽滑塊)和諧波(波谷滑塊)。這種組合導致部分偏移。基本思想是這部分偏移量可以用來使用TranslateTransform重新定位原始.png上的「映射區域」。

現在我面臨的挑戰。正常resultsfile含有約: 200〜400行每部 32到64次諧波 向上直到250個偏差 20直到30案件

爲了得到最大的性能,應該使用留在RenderCapability.MaxHardwareTextureSize界限內的紋理。所以我想分割每個案例的.png(並且如果必要的話每個偏差和/或諧波)。

問題:如何分割多個畫筆中的原始.png文件?哪種筆刷可用於最佳性能?我應該堅持使用ImageBrush(因爲它在初始分割後是靜態的),或者使用BitmapCacheBrush(即?

+0

如果你還沒有遇到這個鏈接,它可能是有用的,有一個性能權衡列表http://msdn.microsoft.com/en-us/library/bb613553.aspx – PeskyGnat

+0

Thx爲鏈接。我已經看到了。這就是爲什麼我正在考慮使用多個ImageBrushes。另一種解決方案是使用一個BitmapCacheBrush並重新填充它。這就是我想通過這個問題找到的。 –

+0

但是問題仍然有效,我們決定停止使用.png文件並使用帶有值的二進制格式文件。我會將這些值隨時轉換爲圖像。期望的是,這將減少總體文件大小,使其適合MaxHardwareTextureSize範圍... –

回答

0

您可能要考慮使用WriteableBitmap而不是WPF畫筆。然後,您可以編寫任何像素而不用緩存任何像素數據。

+0

感謝您的建議。這是我原先採取的一種方法。但是在採取這個路線之後不久,我得到一個應用程序掛起我在這裏提交這個:https://connect.microsoft.com/VisualStudio/feedback/details/678273/use-writeablebitmap-in-combination-with-viewport3d-compositiontarget-rendering-event-hangs-my-application。作爲一種解決方法,我使用了一個BitmapImage,它有一個構造函數重載,允許給出一個代表像素數據的字節數組。這工作完美。任何人都可以確認我發現的錯誤(並請投票解決)。 –

相關問題