返回 Image的事实Image.FromFile("test.png")
并不意味着它返回 Image 类的实例。因为 Image 是抽象的,所以它只能返回 Image 的一个子类。
该方法通过调用GdipGetImageTypeFromFile
根据在文件中找到的内容确定返回的内容。
另外:类 Bitmap 不是为.bmp
文件保留的。通过使用解码器,FromFile 方法将文件的字节转换为图像的内存表示。通常是一大块字节,用于指定像素的红色、蓝色、绿色和 alpha 值。它存储在 Bitmap 类的一个实例中。
另一种类型的文件是元文件。这些文件不包含像素信息,但包含矢量信息。读取元文件时,它不会在内存中转换为像素数据,而是存储矢量信息。这使元文件能够调整图像大小而不会降低质量。
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"));
}
}
根据图像类型创建和加载元文件或位图对象。这两种类型派生自 Image。