我正在尝试使用Microsoft文档中提供的代码解码Tiff图像:
然而,当我到达这一行时:
Image myImage = new Image();
我收到一条错误,告诉我无法创建抽象类的实例。我已经知道你不能创建一个抽象类的实例,我想知道为什么这在文档中?
以下是导致问题的整个代码块:
Image myImage = new Image();
myImage.Source = bitmapSource;
myImage.Stretch = Stretch.None;
myImage.Margin = new Thickness(20);
它还说System.Drawing.Image不包含.Source
,.Stretch
和.Margin
的定义,这让我觉得我需要使用不同的命名空间?所以当我查找Image.Source
的文档时:
http://msdn.microsoft.com/en-us/library/system.drawing.image(v=vs.110).aspx
它说它使用System.Windows.Controls
命名空间,当然它是一个包含PresentationFramework.dll
中定义的类的命名空间 - 我已经拥有它。
我缺少什么想法?
答案 0 :(得分:3)
System.Windows.Controls.Image和System.Drawing.Image之间可能存在模糊的引用冲突。如果您没有使用它,请尝试删除System.Drawing.dll引用,或者只使用完全限定的类名(命名空间+类名)
答案 1 :(得分:1)
文档 - which you linked to - 正如您所说,包含以下代码行:
Image myImage = new Image();
你说你得到这个编译错误:
无法创建抽象类或接口的实例
这意味着你使用了错误的Image
类。
在.NET框架和周围的核心库中,只有2个这样的Image
类:
框架使用第一个作为图像解码和编码的基类,除了它是 true 基类之外,它对你的问题看起来很有希望,所以它是抽象的,解释了你得到的错误信息。
演示框架WPF使用另一个类来表示屏幕上的图像。但是,这个类不是抽象。
所以你很可能在这里使用了错误的类并且已经进入了System.Drawing.Image
类,而你确实想要使用System.Windows.Controls.Image
类。
有几种方法可以解决此问题:
在您的文件中添加using
指令:
using System.Windows.Controls;
但是,这可能只是用另一个编译器错误替换现有的编译器错误,即
'Image'是'System.Drawing.Image'和'System.Windows.Controls.Image'之间的模糊引用
要让现有代码确定您使用的是错误的类,您可能已经拥有using System.Drawing;
。如果你可以删除它,太棒了!否则,......
添加using
别名以专门控制您正在谈论的Image
班级:
using Image = System.Windows.Controls.Image;
此可以工作,然后可能不会。如果确实如此,太棒了!否则,......
使用完整命名空间前缀类的使用:
System.Windows.Controls.Image myImage = new System.Windows.Controls.Image();