为什么我需要在一种情况下将位图转换为图像而不是另一种情况?

时间:2011-02-04 07:35:58

标签: c# graphics

Bitmap b = (Bitmap)Bitmap.FromFile(path); //需要投射

..Graphics.DrawImage(b,x,y); //不需要施放,而DrawImage只接受类型Image

2 个答案:

答案 0 :(得分:3)

Bitmap始终为Image,但不是每个Image都是Bitmap;或者在课堂上:

public sealed class Bitmap : Image {...}

第一个中的方法实际上是从Image继承的 - 它是真的调用:

public static Image FromFile(string path)

,您需要声明将Bitmap推入Bitmap变量是Image。毕竟,它可能是另一种支持的path类型 - 而不仅仅是位图。大概是你的Image img = Image.FromFile(path); // or var img = Image.FromFile(path); ... Graphics.DrawImage(img,x,y); 指向位图类型的图像。

如果你有:

Image
然后生活会更加清晰。

在第二种情况下,只需Image - 任何 Bitmap即可; {{1}}很好......

答案 1 :(得分:0)

当您致电Bitmap.FromFile时,您实际上正在呼叫Image.FromFileFromFile不是Bitmap的静态方法,但由于Bitmap继承自Image,您还可以通过FromFile访问Bitmap方法。 Bitmap.FromFile返回Image的原因是因为它是FromFile类的Image

Image.FromFile可以加载不同类型的图片,例如Bitmap类型的图片。您需要将Image.FromFile的结果转换为Bitmap,因为无论加载的图片类型如何,Image.FromFile的返回类型始终为Image

您不需要为Graphics.DrawImage强制转换此内容的原因是因为该方法接受任何来自Image Bitmap的图像类型。