现在我使用下一个代码将图片从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),它看起来很模糊。
我想知道如何使它们不模糊(它们看起来像砖块,但它们需要不模糊);
小图片的等待结果需要看起来像这样
正常图片的等待结果需要看起来像这样
答案 0 :(得分:4)
模糊来自image interpolation。要获得所需的块状外观,您需要使用nearest neighbour interpolation。
值得庆幸的是,.NET已经构建了这个版本。您可以将插值模式设置为呈现Graphics
的GDI PictureBox
对象。
为此,我建议您使用PictureBox
用户控件并添加InterpolationMode
参数。然后,您可以覆盖OnPaint
方法,并使用插值模式。
public class InterpolatingPictureBox : PictureBox
{
public InterpolationMode InterpolationMode { get; set; }
protected override void OnPaint(PaintEventArgs eventArgs)
{
eventArgs.Graphics.InterpolationMode = InterpolationMode;
base.OnPaint(eventArgs);
}
}
升级到256x256
NearestNeighbour
(左)Bilinear
(默认为中间)HighQualityBilinear
(右)所有内容都在InterpolatingPictureBox
控件上呈现。
答案 1 :(得分:0)
你有一个严重的问题。没有简单的解决方案。
我想知道如何让他们不模糊
不可能。锐化(这是你想要的)图像到更大的分辨率是可能的,但这需要严重的高级程序运行一段时间。这里不是程序员 - 但这是印刷美术摄影的标准步骤。照片分辨率相对较低(我的分辨率高达4300万像素),打印机的分辨率要高得多。
有一些AA方法很容易,但10x10大小上升到100x100甚至会挑战最先进的程序 - 10x10无法使用。你说的是10x,从头开始没有数据。
您可以关闭抗锯齿功能,在没有抗锯齿的情况下在代码中调整图像大小(易于操作) - 但这会使真实图片看起来很难看。 .NET没有真正的高级锐化功能,再次,10x10还不足以开始使用。
您可以做的最好的事情就是不将它们加载到图片框中。将它们加载到位图中,然后将其绘制到最佳大小(100x100)的新位图上。这至少可以让您完全控制调整大小。
您可以在此处找到此代码 Scaling a System.Drawing.Bitmap to a given size while maintaining aspect ratio
,而
Image resizing in .Net with Antialiasing
告诉您如何选择抗锯齿。
但又一次:期待很少。这些抗锯齿模式纯粹是技术性的,而不是用于照片的任何东西。另外,选择正确的一个取决于输入图像 - 因此您可以使用默认值或给用户一个选择。我可能过于复杂,但在编程之外我实际上处理的是需要按比例放大的图像,尽可能少的图像丢失用于大型打印。