gpt4 book ai didi

c# - WPF 中 3D 表面问题的图像缩放质量

转载 作者:行者123 更新时间:2023-11-30 12:35:26 24 4
gpt4 key购买 nike

我有一个使用 WPF 3D 图形创建的图像查看器。那里的图像质量真的很差,所以我开始研究这个问题,创建了一个简单的应用程序,它在窗口的顶部使用 2D 图形显示图像,在窗口的底部使用 3D 图形显示相同的图像。我注意到图像在 3D 表面上看起来比在 2D 上差得多。 3D 表面上的颜色饱和度较低,并且没有清晰的边界。请注意,我将线性位图缩放 模式应用于根网格。另一个奇怪的事情是,当我将位图缩放模式更改为“Fant”或“NearestNeighbor”时,它会影响 2D 图形,但 3D 表面上的图像保持不变!我在这个示例中使用的图像高度 = 466 像素,宽度 = 490 像素。我在代码(2D 和 3D 实现)中将其缩小一点,以查看缩放质量的下降。代码是:

<Window x:Class="Scaling3DSample.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="340">
<Grid x:Name="backgroundGrid">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
</Window>

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Shapes;
namespace Scaling3DSample
{
public partial class Window2 : Window
{
private static double _distanceFromCamera = 0.62618;

public Window2()
{
InitializeComponent();
RenderOptions.SetBitmapScalingMode(backgroundGrid, BitmapScalingMode.Linear);
Create2DGraphics();
// THE SAME IMAGE ON 3D SURFACE LOOKS MUCH WORSE
Create3DGraphics();
}

private void Create2DGraphics()
{
Rectangle exampleRectangle = new Rectangle();
Grid.SetRow(exampleRectangle, 0);

exampleRectangle.Width = 335;
exampleRectangle.Height = 317;
exampleRectangle.Fill = GetBrush();
backgroundGrid.Children.Add(exampleRectangle);
}

private void Create3DGraphics()
{
Viewport3D mainViewPort3D = new Viewport3D();
Grid.SetRow(mainViewPort3D, 1);

mainViewPort3D.Camera = new PerspectiveCamera { LookDirection = new Vector3D(-1, 0, 0), UpDirection = new Vector3D(0, 0, 1), FieldOfView = 77.0942 };
mainViewPort3D.Children.Add(new ModelVisual3D { Content = new AmbientLight() });

MeshGeometry3D geometry3D = new MeshGeometry3D();

Point3D topLeft = new Point3D(-_distanceFromCamera, 0.5, -0.5);
Point3D bottomRight = new Point3D(-_distanceFromCamera, -0.5, 0.5);

geometry3D.Positions.Add(bottomRight);
geometry3D.Positions.Add(new Point3D(-_distanceFromCamera, topLeft.Y, bottomRight.Z));
geometry3D.Positions.Add(new Point3D(-_distanceFromCamera, bottomRight.Y, topLeft.Z));
geometry3D.Positions.Add(topLeft);

geometry3D.TriangleIndices.Add(1);
geometry3D.TriangleIndices.Add(0);
geometry3D.TriangleIndices.Add(2);

geometry3D.TriangleIndices.Add(2);
geometry3D.TriangleIndices.Add(3);
geometry3D.TriangleIndices.Add(1);

geometry3D.TextureCoordinates.Add(new Point(0, 0));
geometry3D.TextureCoordinates.Add(new Point(1, 0));
geometry3D.TextureCoordinates.Add(new Point(0, 1));
geometry3D.TextureCoordinates.Add(new Point(1, 1));

Material material = new DiffuseMaterial(GetBrush());

ModelVisual3D modelForGeometry = new ModelVisual3D { Content = new GeometryModel3D(geometry3D, material) };
mainViewPort3D.Children.Add(modelForGeometry);
backgroundGrid.Children.Add(mainViewPort3D);
}

private ImageBrush GetBrush()
{
// put any other image URI here, image Height = 466px, Width = 490px
ImageBrush brush = new ImageBrush(new BitmapImage(new Uri("lion.jpg", UriKind.Relative)));
brush.Stretch = Stretch.Fill;
return brush;
}
}
}

在此先感谢您的帮助!

最佳答案

那么还有一些其他变量需要考虑。

尽管 WPF 要求外观更漂亮,但您的显卡设置可能会强制降低插值模式。 WPF 的 3D 是在第 2 层硬件上进行硬件加速的,因此请检查您的驱动程序的控制软件。 WPF 可能无法请求更好的东西!

也尝试在您的应用程序和显卡设置中启用抗锯齿。

关于c# - WPF 中 3D 表面问题的图像缩放质量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5524947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com