C# 如果图片可以从10x10到500x500,如何在PictureBox中显示图像
现在我使用下一个代码将图片从desctop下载到PictureBoxC# 如果图片可以从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
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已将此内置到。您可以将插值模式设置为GDIGraphics
对象,该对象呈现您的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