当前位置: 首页 > 编程语言 > C#

BitmapImageDecodePixelWidth奇怪行为分享

时间:2023-04-10 14:36:08 C#

BitmapImageDecodePixelWidth奇怪行为我在显示大量图像时遇到了一些性能问题,我发现问题是当我真的只需要一张小于1/4的图像时大小,正在使用全分辨率图像。所以我在BeginInit和EndInit之间添加了一行,将DecodePixelWidth设置为200,这是我在布局中需要的最大宽度。我的性能不再是问题,但有些图像非常小,绝对不会接近200px宽。大多数图像似乎都能正确显示,而且似乎没有任何韵律或太小的原因,而且效果很好。我认为这可能是由于图像的原始尺寸不同,但结果没有图案。我曾尝试将宽度设为600,然后让相关图像以正确的200宽度显示,但性能受到影响。在这一点上,我什至不确定从哪里开始寻找,并且非常感谢朝着正确方向迈出的一步。编辑:下面有关图像以及我如何使用它们的更多信息。大多数图像的尺寸都在1000X1500左右,尽管有些图像的尺寸很奇怪,例如1000X1513。所有图像都是JPEG。目前,每个图像都放置在我设计的自定义用户控件中,没有什么特别的,只是围绕它的背景和一些文本。然后将每个用户控件放置在其自己的行/列中的网格中。网格位于滚动查看器内,因此用户可以滚动列表。这可能不是实现我正在寻找的目标的最佳方式,但这是我很快想到的,并且在大多数情况下都有效。如果它以更简单或更简洁的方式满足我的要求,我很乐意切换到另一种显示方法。预期结果是一个电影浏览应用程序。将有一个可滚动的电影列表,每部电影都以自己的图块表示,包括标题、电影海报、类型信息、评级和描述。此列表将对各种项目进行排序。有关电影的信息存储在另一台机器上的sql数据库中。图像最初存储在另一台计算机上,但在本地复制以提高性能。编辑:我已经能够通过不使用DecodePixelWidth来解决问题,而是以所需的大小保存图像的副本,从而提高性能。Youngjae不使用DecodePixelWidth的建议以及他提到的使用虚拟化列表让我看到了以下关于创建虚拟化包装面板的文章,它应该可以解决任何其他性能问题。这篇文章是针对silverlight的,但据我所知,silverlight基本上是wpf的简化版本,如果它在silverlight中工作,它应该在wpf中工作。将它转换为我的用途应该不会太难。第1部分-MeasureOverride第2部分-ArrangeOverride第3部分-动画第4部分-虚拟化在MSDN链接中,您可以找到如下词语。JPEG和便携式网络图形(PNG)编解码器将图像本地解码为指定大小;其他编解码器以原始大小解码图像并将图像缩放到所需大小。并且,由于上述原因,我建议您不要使用DecodePixelWidth来调整大小。我不知道您的原始图像大小和格式,但使用虚拟列表和?以上就是C#学习教程的全部内容:BitmapImageDecodePixelWidth奇怪行为分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: