无法隐式转换类型 'System.Drawing.Image' 为 'System.Drawing.Bitmap'

9

声明了一个位图

private Bitmap img1 = null;  
private Bitmap img2 = null;  

openFileDialog中选择图像后,它将被放置在数组中。

imgName = openFD.FileNames;
pictureBox1.Image = Image.FromFile(imgName[0]);  
pictureBox2.Image = Image.FromFile(imgName[1]);

我用以下代码替换了button1的代码。
img1 = Image.FromFile(imgName[0]);  
img2 = Image.FromFile(imgName[1]);

但是出现了错误

无法将类型为“System.Drawing.Image”的对象隐式转换为类型“System.Drawing.Bitmap”

我尝试将代码更改为img1 = Bitmap.FromFile(imgName[0]);,但仍然出现相同的错误。
有没有建议如何正确地纠正或处理这个问题?


2
虽然Bitmap始终被视为Image,但Image不一定是Bitmap。它为其他类型的图像提供了未来支持。因此,您不应该试图强制将Image转换为Bitmap。 - Trevor Elliott
4个回答

14
img1 = new Bitmap(imgName[0]);
img2 = new Bitmap(imgName[1]);

2
img1 = (Bitmap) Image.FromFile(imgName[0]);
img2 = (Bitmap) Image.FromFile(imgName[1]);

正如错误信息所说,你不能隐式地执行此操作,需要将其显式转换为Bitmap编辑 根据下面的评论,我建议使用icktoofay的答案,即使用Bitmap构造函数,或者如果可以直接使用Image类而不是使用Bitmap,也可以使用它。

3
你不能随意将事物转换成你想要的类型。这是编程,不是魔术。Bitmap 继承自 Image,但反过来不行。这意味着你不能隐式地将 Image 对象转换为 Bitmap 对象。强制转换只是让编译器保持沉默,它并不能解决问题。 - Cody Gray
那么这里应该采用什么正确的方式呢?使用位图构造函数还是直接使用Image类?我想正确的方式应该是使用Image,除非你确定上传的文件是位图。你怎么看? - Haris Hasan
很难说。如果您需要一个“位图”,那么您需要创建一个“Bitmap”类的实例,可能使用构造函数。否则,将您要分配的变量(img1img2)声明为“Image”类的对象即可轻松解决问题。重点是类型转换很少是正确答案。编译器试图警告您可能存在的问题:您应该听取其建议。 - Cody Gray
2
Image.FromFile()通常返回一个位图,所以强制转换会起作用。但并非总是如此,它也可能返回一个元文件。那就炸了。明智的做法是使用Bitmap(string)构造函数。 - Hans Passant
对不起,我刚接触 C# 编程。我使用了 icktofay 的答案,它起作用了。谢谢大家。 - Ozarraga_AB

0

我在我的C#代码中使用了这三行来将字节值分配给图像。

ImageConverter converter = new ImageConverter();
pbStudentPicture.Image =  (Image)converter.ConvertFrom(StudentPinfo.Picture);
pbStudentPicture.SizeMode = PictureBoxSizeMode.StretchImage;

0
对于我的情况,我的 System.Drawing.Image 并不是来自文件,而是来自设备的相机。由于我不想将图像保存为一个中间步骤的文件,所以我采用了以下方法:
var imageBitmap = new Bitmap(image.Width, image.Height);
using (var graphics = Graphics.FromImage(imageBitmap))
    graphics.DrawImage(image, 0, 0, image.Width, image.Height);

也许对其他人有帮助 ;)

2
你可以用更简单的方式实现这个功能,只需要使用 var imageBitmap = new Bitmap(image); 即可。结果相同。 - Nyerguds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接