C# System.Drawing.Image类如何工作?

C# System.Drawing.Image类如何工作?,c#,image,graphics,picturebox,abstract,C#,Image,Graphics,Picturebox,Abstract,我想知道为什么可以设置PictureBox的Image属性,而Image类是抽象类,因此无法实例化 Image.FromFile()方法是否创建位图(从Image派生的类),然后用于在PictureBox中显示?如果是,则在从非.bmp文件创建图像时,如果例如我使用: Image.FromFile("test.png") 在显示这个.png文件之前,它会在内存中将其转换为位图吗 我知道如何做以上所有的事情,我知道它是有效的,但我只是想弄清楚当图像是抽象的时候它是如何工作的,因为我无法找到关于这

我想知道为什么可以设置PictureBox的Image属性,而Image类是抽象类,因此无法实例化

Image.FromFile()方法是否创建位图(从Image派生的类),然后用于在PictureBox中显示?如果是,则在从非.bmp文件创建图像时,如果例如我使用:

Image.FromFile("test.png")
在显示这个.png文件之前,它会在内存中将其转换为位图吗


我知道如何做以上所有的事情,我知道它是有效的,但我只是想弄清楚当图像是抽象的时候它是如何工作的,因为我无法找到关于这个问题的很多信息-任何解释都将不胜感激

事实上,
Image.FromFile(“test.png”)
返回图像并不意味着它返回图像类的实例。因为Image是抽象的,所以它只能返回Image的一个子类

方法
FromFile
通过调用在文件中找到的内容来确定返回的内容

另外:类位图不是为
.bmp
文件保留的。通过使用解码器,FromFile方法将文件的字节转换为图像的内存表示形式。通常是一个大的字节块,用于指定像素的红色、蓝色、绿色和alpha值。它存储在位图类的实例中

另一种类型的文件是元文件。这些文件不包含像素信息,但包含矢量信息。当读取图元文件时,它不会转换为内存中的像素数据,而是存储矢量信息。这使图元文件能够调整图像大小,而不会降低质量

FromFile调用的方法如下所示:

internal static Image CreateImageObject(IntPtr nativeImage)
{
  int type = -1;
  int imageType = SafeNativeMethods.Gdip.GdipGetImageType(new HandleRef((object) null, nativeImage), out type);
  if (imageType != 0)
    throw SafeNativeMethods.Gdip.StatusException(imageType);
  switch (type)
  {
    case 1:
      return (Image) Bitmap.FromGDIplus(nativeImage);
    case 2:
      return (Image) Metafile.FromGDIplus(nativeImage);
    default:
      throw new ArgumentException(System.Drawing.SR.GetString("InvalidImage"));
  }
}

根据图像类型创建并加载图元文件或位图对象。这两种类型源自图像。

顺便说一句,源自
图像。FromFile
托管GDI+具有内置编码器和解码器,支持以下文件类型:BMP-GIF-JPEG-PNG-TIFF
。返回一个派生类的实例对我来说似乎是合乎逻辑的。是的,我也认为它是在返回一个派生类,但是我只是想得到一些关于是否是这样的确凿的澄清——对此的任何参考都将不胜感激。只想添加
Image.FromFile(“test.png”)
是一个示例,它通常返回抽象基类或接口以更好地隐藏实现细节。