我有一个类似于PictureBox控件的图像显示控件,它需要一个Bitmap并显示它。问题是我的控件将天真地尝试执行操作,要求它访问它的图像字段,即使已经处理了提供的位图。所以,假设我有一个带有图像显示控件的表单。我已将Image属性设置为我从文件加载的图像,然后由于某种原因(无论为什么或如何)处理图像。然后我做了一些事情来重新绘制图像控件,当它试图访问现在处理的Bitmap时,它会左右抛出InvalidArgumentException。我理解这个问题,但对解决方案并非百分之百的信心。
我的图像显示控件无法控制是否通过调用代码处理图像引用,并且没有我知道检查对象是否被处置的公共方式。我可以想到两种可能的解决方案:
在我实施选项#1(我认为最有意义的选项)之前,我想我会问这里是否有最佳实践来处理这种情况。
答案 0 :(得分:2)
当我在C#和WinForms中开发ImageViewer控件时,我遇到了完全相同的困境。事实上,处理图像的责任在于控制的客户端,而另一方面,在不合时宜的处理中出现错误会导致控件崩溃,这是不可接受的。
我使用了第一种方法 - 保留位图的本地/内部副本 - 除了内存使用外,它没有任何缺点。我相信这是更好的方法。
答案 1 :(得分:0)
如果要更改位图上的任何像素,则应始终克隆它并更改克隆版本。
除此之外,你的解决方案可能还不错。