【问题标题】:Which WPF Brush to use and how to create it使用哪个 WPF 画笔以及如何创建它
【发布时间】:2011-09-18 15:10:46
【问题描述】:

我有一个 WPF 3D 应用程序 (C# .NET 4.0),它有很多 3D 几何图形。现在我需要通过应用纹理为这些几何图形着色。纹理的来源是一个大的 .PNG 文件,如下所示:

.PNG 文件包含重复部分。 Case、Deviation 和 Harmonic 的每种组合都有一个部分。个案有一个或多个偏差 (nDev)。案例也有一个或多个谐波(nHarm)。所以section的数量等于每个Case的nDev * nHarm之和。

一个部分中的每一行像素都映射到一个几何图形。

最终用户应该能够选择 Case(槽组合框)、Deviation(槽滑块)和 Harmonic(槽滑块)。这种组合导致截面偏移。基本思想是,此部分偏移可用于使用 TranslateTransform 在原始 .png 上重新定位“映射区域”。

现在我面临的挑战。一个正常的结果文件包含大约: 每节 200 到 400 行 32 至 64 次谐波 最多 250 个偏差 20到30例

为了获得最佳性能,我应该使用保持在RenderCapability.MaxHardwareTextureSize 范围内的纹理。因此,我想按案例拆分 .png(如有必要,按偏差和/或谐波)。

问题:如何将原始 .png 文件拆分为多个画笔?使用哪种刷子可以获得最佳性能?我应该坚持使用 ImageBrush(因为它在初始拆分后是静态的)还是使用 BitmapCacheBrush 即?

【问题讨论】:

  • 如果你还没有遇到这个链接,它可能很有用,这里有一个性能权衡列表msdn.microsoft.com/en-us/library/bb613553.aspx
  • 感谢链接。我已经看到了。这就是为什么我正在考虑使用多个 ImageBrushes。另一种解决方案是使用一个 BitmapCacheBrush 并重新填充它。这就是我想通过这个问题找到的。
  • 但是问题仍然有效,我们决定停止使用 .png 文件并使用带有值的二进制格式文件。我将即时将这些值转换为图像。期望这将以适合 MaxHardwareTextureSize 范围的方式减小整体文件大小...

标签: wpf 3d transform textures brush


【解决方案1】:

您可能需要考虑使用WriteableBitmap 而不是 WPF 画笔。然后,您可以写入所需的任何像素,而无需缓存像素数据以外的任何内容。

【讨论】:

  • 感谢您的建议。这是我最初采用的方法。但是在这次溃败后不久,我的应用程序挂起。我在这里提交了这个:connect.microsoft.com/VisualStudio/feedback/details/678273/…。作为一种解决方法,我使用了一个 BitmapImage,它有一个构造函数重载,允许给出一个表示像素数据的字节数组。这完美地工作。任何人都可以确认我发现的错误(请投票解决)。
猜你喜欢
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
相关资源
最近更新 更多