【问题标题】:Cannot implicitly convert type 'System.Drawing.Image' to 'System.Drawing.Bitmap'`无法将类型“System.Drawing.Image”隐式转换为“System.Drawing.Bitmap”`
【发布时间】:2012-01-14 07:03:01
【问题描述】:

声明了一个位图

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

openFileDialog中选择图像后,图像将被放置。
选定的图像被放置在一个数组中。

imgName = openFD.FileNames;

然后 button1 显示这些图像。

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]);。但仍然有同样的错误。
任何建议如何纠正或正确执行此操作?

【问题讨论】:

  • 虽然位图始终被视为图像,但图像不一定是位图。它为其他类型的图像提供了未来的支持。因此,您不应该尝试将 Image 强制为 Bitmap。

标签: c# .net bitmap


【解决方案1】:
img1 = new Bitmap(imgName[0]);
img2 = new Bitmap(imgName[1]);

【讨论】:

    【解决方案2】:
    img1 = (Bitmap) Image.FromFile(imgName[0]);
    img2 = (Bitmap) Image.FromFile(imgName[1]);
    

    正如错误消息所说,您不能隐式执行此操作,您需要将其显式转换为 Bitmap

    编辑

    根据下面的 cmets,我建议要么使用 icktoofay 的答案,即使用 Bitmap 构造函数,或者如果你可以直接使用 Image 类而不是使用 Bitmap,你也可以使用它

    【讨论】:

    • 你不能随心所欲。这是编程,不是魔术。 Bitmap 继承自 Image,但不是相反。这意味着您不能将 Image 对象隐式转换为 Bitmap 对象。强制转换只是告诉编译器关闭,并不能解决问题。
    • 那么这里的正确方法是什么。使用 Bitmap Constructor 还是直接使用 Image 类?我想正确的方法是使用图像,除非您确定上传的文件是位图。你怎么看?
    • 很难说。如果您需要Bitmap,则需要创建Bitmap 类的实例,可能使用构造函数。否则,将您分配给的变量(img1img2)声明为Image 类的对象,您的问题就会消失。关键是演员很少是正确的答案。编译器试图警告你一个潜在的问题:你应该注意它的建议。
    • Image.FromFile() 通常会返回一个位图,这样演员才能工作。并非总是如此,它也可以返回一个元文件。卡布姆然后。明智的做法是使用 Bitmap(string) 构造函数。
    • 很抱歉,我只是 C# 编程的新手。我用了icktofay的答案,它奏效了。谢谢大家
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      就我而言,我的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);
      

      也许这对其他人有帮助;)

      【讨论】:

      • 你可以用更简单的方式做到这一点;只需var imageBitmap = new Bitmap(image);。结果相同。
      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多