Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果图片可以从10x10到500x500,如何在PictureBox中显示图像_C#_Image_Picturebox - Fatal编程技术网

C# 如果图片可以从10x10到500x500,如何在PictureBox中显示图像

C# 如果图片可以从10x10到500x500,如何在PictureBox中显示图像,c#,image,picturebox,C#,Image,Picturebox,现在我使用下一个代码将图片从desctop下载到PictureBox OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "BMP|*.bmp"; if (openFileDialog.ShowDialog() != DialogResult.OK) return; pictureBox.Load(ope

现在我使用下一个代码将图片从desctop下载到PictureBox

        OpenFileDialog openFileDialog = new OpenFileDialog();
        openFileDialog.Filter = "BMP|*.bmp";
        if (openFileDialog.ShowDialog() != DialogResult.OK)
            return;

        pictureBox.Load(openFileDialog.FileName);
        pictureBox.SizeMode=PictureBoxSizeMode.StretchImage;
        pictureBox.BorderStyle = BorderStyle.Fixed3D;
如果我使用普通图片(100x100),它看起来很好(不模糊)

如果我用一张很小的图片(15x15),它看起来很模糊

我想知道如何使它们变得不模糊(它们可以看起来像砖块,但它们需要不模糊)

小图片的等待结果需要如下所示

正常图片的等待结果需要如下所示


你的问题很严重。没有简单的解决办法

我想知道如何让他们不困惑

不可能。将图像锐化(这是您想要的)到更高分辨率是合理的,但这需要运行相当长时间的高级程序。这里不以程序员的身份说话——但这是印刷美术摄影的标准步骤。照片的分辨率相对较低(我的分辨率高达4300万像素),打印机的分辨率要高得多

有一些AA方法很简单,但10x10的大小比100x100大,即使是最先进的程序也会面临挑战——10x10没有什么好用的。你说的10倍开始时没有数据

您可以关闭抗锯齿,在代码中调整图像大小(很容易做到),而无需进行抗锯齿-但这会使真实图片看起来很难看。NET没有真正的高级锐化功能,同样,10x10还不足以开始使用

最好不要将它们加载到图片框中。将它们加载到位图中,然后将其绘制到最佳大小(100x100)的新位图上。这至少可以让您完全控制大小调整

您可以在以下网址找到此代码:

告诉您如何选择抗锯齿


但再一次:期望很少。这些抗锯齿模式纯粹是技术性的,而不是用于照片的任何模式。另外,选择正确的一个取决于输入的图像-所以你可以使用默认值或给用户一个选择。我可能把事情搞得太复杂了,但在编程之外,我实际上是在处理需要放大的图像,而对于大型打印来说,图像损失要尽可能小。

你有一个严重的问题。没有简单的解决办法

我想知道如何让他们不困惑

不可能。将图像锐化(这是您想要的)到更高分辨率是合理的,但这需要运行相当长时间的高级程序。这里不以程序员的身份说话——但这是印刷美术摄影的标准步骤。照片的分辨率相对较低(我的分辨率高达4300万像素),打印机的分辨率要高得多

有一些AA方法很简单,但10x10的大小比100x100大,即使是最先进的程序也会面临挑战——10x10没有什么好用的。你说的10倍开始时没有数据

您可以关闭抗锯齿,在代码中调整图像大小(很容易做到),而无需进行抗锯齿-但这会使真实图片看起来很难看。NET没有真正的高级锐化功能,同样,10x10还不足以开始使用

最好不要将它们加载到图片框中。将它们加载到位图中,然后将其绘制到最佳大小(100x100)的新位图上。这至少可以让您完全控制大小调整

您可以在以下网址找到此代码:

告诉您如何选择抗锯齿

但再一次:期望很少。这些抗锯齿模式纯粹是技术性的,而不是用于照片的任何模式。另外,选择正确的一个取决于输入的图像-所以你可以使用默认值或给用户一个选择。我可能把事情搞得太复杂了,但在编程之外,我实际上处理的是需要放大的图像,而对于大型打印来说,图像损失要尽可能小。

模糊性来自于。要拥有你想要的块状外观,你需要使用

谢天谢地,.NET已将此内置到。您可以将插值模式设置为GDI
Graphics
对象,该对象呈现您的
PictureBox

为此,我建议扩展
PictureBox
用户控件并添加一个参数。然后,可以重写该方法,并使用插值模式

public class InterpolatingPictureBox : PictureBox
{
    public InterpolationMode InterpolationMode { get; set; }

    protected override void OnPaint(PaintEventArgs eventArgs)
    {
        eventArgs.Graphics.InterpolationMode = InterpolationMode;
        base.OnPaint(eventArgs);
    }
}

这是一个16x16图像:,使用

  • 最近的邻居
    (左)
  • 双线性
    (默认值,中间)
  • 高质量双线性
    (右)
所有这些都在
插值PictureBox
控件上呈现。

模糊性来自。要拥有你想要的块状外观,你需要使用

谢天谢地,.NET已将此内置到。您可以将插值模式设置为GDI
Graphics
对象,该对象呈现您的
PictureBox

为此,我建议扩展
PictureBox
用户控件并添加一个参数。然后,可以重写该方法,并使用插值模式

public class InterpolatingPictureBox : PictureBox
{
    public InterpolationMode InterpolationMode { get; set; }

    protected override void OnPaint(PaintEventArgs eventArgs)
    {
        eventArgs.Graphics.InterpolationMode = InterpolationMode;
        base.OnPaint(eventArgs);
    }
}

这是一个16x16图像:,使用

  • 最近的邻居
    (左)
  • 双线性
    (默认值,中间)
  • 高质量双线性
    (右)

所有内容都在
插值PictureBox
控件上呈现。

尝试将图片框大小更改为图像大小。如果你的图像拉伸过多,它会像这样出现。它是模糊的,因为它正在进行抗锯齿处理。没有足够的图像数据来填充100x100的正方形,因此系统试图通过平滑可用像素的图像来“填充空白”。没有真正的解决方案,您可以将图像设置为实际大小,在这种情况下,将不会发生缩放重复PictureBox始终使用“体面”的图形值。InterpolationMode在重新缩放图像以适应co