调整WPF图像大小/缩放时的失真

时间:2010-03-10 20:26:12

标签: .net wpf image resize

我有一个显示图像的程序,用户可以在窗口中调整图像大小(例如通过滚动鼠标滚轮)。我使用RenderTransform缩放图像,如下所示:

<Image x:Name="CurrentImage">
    <Image.RenderTransform>
        <TransformGroup>
            <TranslateTransform x:Name="Translate" X="0" Y="0"/>
            <ScaleTransform x:Name="Scale" ScaleX="1" ScaleY="1"/>
        </TransformGroup>
    </Image.RenderTransform>
</Image>

然后我只需更改ScaleXScaleY属性。图像按预期调整大小。

然而,在某些尺度下,图像变得非常扭曲。低于约20%且高于约80%,它显示正常,但对于其间的分辨率,部分或全部图像失真。请参阅下面的屏幕截图。

其他一些细节:

  • 我试过的两台Windows XP机器有相同的损坏,但Windows 7笔记本电脑没有出现问题。
  • 我还尝试使用RenderTransformHeight属性自行缩放图片来替换Width,但它没有任何区别。
  • 并非所有图像都有问题,而且那些图像有时会在不同的比例因子下进行。较大的图像似乎更糟糕,但我还没有系统地测量过。
  • .NET 3.5和.NET 4 RC都表现出这种行为。

之前有没有人见过这种行为,你有什么想法吗?

原始尺寸的20%:

alt text http://maylark.com/Scale20.png

原始尺寸的26%:

alt text http://maylark.com/Scale26.png

占原始尺寸的41%:

alt text http://maylark.com/Scale41.png

原始尺寸的64%:

alt text http://maylark.com/Scale64.png

原始尺寸的80%:

alt text http://maylark.com/Scale80.png

3 个答案:

答案 0 :(得分:2)

因此,在尝试隔离问题数小时之后,我决定重新开始使用新的Visual Studio解决方案并逐个放回组件。一切都在新的解决方案中工作,最后我把所有课程都归还了,一切都还在运行!

原来是构建设置:非功能版本是针对“任何CPU”的多目标版本,但新解决方案的目标是“x86”。

显然,“任何CPU”程序的Windows XP x64图形子系统存在故障,因为切换到x86或在Vista / 7上运行都解决了这个问题。

我已发布此信息,希望能在某个时间节省其他人。

答案 1 :(得分:0)

很多WPF rendering bugs都是由视频驱动程序引起的,特别是nVidia Quadro卡。您是否尝试过更新驱动程序?

答案 2 :(得分:0)

尝试消除变量。操作系统,硬件和驱动程序(如第一个答案中所述)以及您正在使用的图像格式。你提到不是所有的图像都有问题吗?这些图像格式有什么不同吗?例如。钻头深度,颜色等 您也可以在其他工具中调整图像大小,比如IrfanView,并创建相同的问题。这可能有助于指出司机问题。

图像渲染的方式看起来很可疑,就像图像的步幅被拧到引擎盖下。