【问题标题】:image getting blurred when enlarging picture box放大图片框时图像变得模糊
【发布时间】:2018-09-08 07:07:30
【问题描述】:

我正在开发一个图像处理应用程序。为了缩放图像,我放大了 PictureBox。但放大后我得到下面的图像。

但我想要下图的结果

这是我的代码:

      picturebox1.Size = new Size((int)(height * zoomfactor), (int) 
      (width* zoomfactor));
      this.picturebox1.Refresh();

【问题讨论】:

  • 这可能是图像类型的问题。如果您扩展图像,那么您正在降低压缩质量。也许这个链接可能会帮助stackoverflow.com/questions/12646287/…
  • PictureBox 使用 InterpolationMode.Bilinear,你想要 NearestNeighbor。所以你必须自己做这件事。谷歌“c#调整位图”的基本点击。

标签: c# winforms


【解决方案1】:

PictureBox 本身将始终创建一个漂亮流畅的版本。

要创建您想要的效果,您需要自己绘制缩放版本。为此,您需要设置

 Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;

那么就不会发生模糊..

例子:

private void trackBar1_Scroll(object sender, EventArgs e)
{
    Bitmap bmp = (Bitmap)pictureBox1.Image;
    Size sz = bmp.Size;
    Bitmap zoomed = (Bitmap)pictureBox2.Image;
    if (zoomed != null) zoomed.Dispose();

    float zoom = (float)(trackBar1.Value / 4f + 1);
    zoomed = new Bitmap((int)(sz.Width * zoom), (int)(sz.Height * zoom));

    using (Graphics g = Graphics.FromImage(zoomed))
    {
      if (cbx_interpol.Checked) g.InterpolationMode = InterpolationMode.NearestNeighbor;
      g.PixelOffsetMode = PixelOffsetMode.Half;

      g.DrawImage(bmp, new Rectangle( Point.Empty, zoomed.Size) );
    }
    pictureBox2.Image = zoomed;
}

当然,您需要避免将 PBox 设置为 Sizemode Zoom 或 Stretch!

【讨论】:

  • 非常感谢您的回答。但它会在 graphics.DrawImage() 上引发异常“参数无效”。
  • 嗯,奇怪。第一个像素框中是否有有效图像? IE。 bmp 是有效图片吗?
  • 好的。但我的问题已解决,我得到了输出。
  • 这一定是最好的 SO 答案之一!它的示例代码和演示动画。太棒了!
  • 请注意,对于 NearestNeighbor,您需要将 PixelOffsetMode 设置为 Half,否则顶部和左侧边缘会占用图像的半个像素。这实际上在上面的蓝色边框上可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2013-03-25
  • 2018-05-03
  • 2021-01-17
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多