【问题标题】:How to use a property two times for an image?如何为图像使用两次属性?
【发布时间】:2019-12-01 02:26:59
【问题描述】:

我正在尝试为我的图像添加噪点并将其显示在一个像素框中,然后将其模糊并显示在另一个图片框中。但是我在我的图片框上看到了两个模糊的图像。我怎样才能显示他们两个? 注意:我不想创建新的位图。

Filtreler f1 = new Filtreler();  
Bitmap Orj = new Bitmap(pBox_SOURCE.Image);
f1.Imge = Orj;

if (SablonBoyutu % 2 == 1)
{
   f1.addnoise(f1.Imge);
   pictureBoxNoisyImg.Image = f1.Imge;
   f1.meanfilter(SablonBoyutu, f1.Imge);
   pBox_PROCESSED.Image = f1.Imge;
}
class Filtreler
{
   private Bitmap resim;   
   public Bitmap Imge
   {
      get { return resim;  }
      set { resim = value; }
   }

 .... (my filters)
}

【问题讨论】:

    标签: c# winforms class image-processing


    【解决方案1】:

    我认为您还需要一份图片副本 (img2)

    f1.addnoise(f1.Imge);
    pictureBoxNoisyImg.Image = f1.Imge;
    var img2 = new Bitmap(pictureBoxNoisyImg.Image);
    f1.meanfilter(SablonBoyutu, img2);
    pBox_PROCESSED.Image = img2;
    

    或者

    f1.addnoise(f1.Imge);
    pictureBoxNoisyImg.Image = new Bitmap(f1.Imge);
    f1.meanfilter(SablonBoyutu, f1.Imge);
    pBox_PROCESSED.Image = f1.Imge;
    

    编辑

    要处理旧图像,您可以这样做

    f1.addnoise(f1.Imge);
    if(pictureBoxNoisyImg.Image != null)
    {
        pictureBoxNoisyImg.Image.Dispose();
        pictureBoxNoisyImg.Image = null;
    }
    pictureBoxNoisyImg.Image = new Bitmap(f1.Imge);
    f1.meanfilter(SablonBoyutu, f1.Imge);
    if(pBox_PROCESSED.Image != null)
    {
        pBox_PROCESSED.Image.Dispose();
        pBox_PROCESSED.Image = null;
    }
    pBox_PROCESSED.Image = f1.Imge;
    

    【讨论】:

    • OP注意:不小心创建Bitmaps会导致你GDI我们的内存问题,所有Bitmaps都需要被处理掉。因此,应特别注意它们的创建方式和处理时间。
    • 谢谢,它有效。但我正在寻找一种在不创建更多位图的情况下编写它的方法。有办法吗?
    • 你说没有别的办法。但它适用于 Clone() 方法。我很困惑。
    • 我说是因为您的原始代码(使用new 关键字)很好。您所要做的就是在设置新图像之前处理旧图像。查看我的编辑
    • 最后一个问题,是否可以只使用一个位图进行多个过滤?​​
    【解决方案2】:

    还有一种替代方法称为克隆 (image.Clone();),而不是使用新的位图实例。也许它会对你有所帮助。 What's the difference between Bitmap.Clone() and new Bitmap(Bitmap)?

    【讨论】:

    • 克隆位图不应该单独使用,你应该小心使用 LockBits 等。它们在我引用的链接中进行了解释。
    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2013-06-15
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多