C# System.Drawing.Image类如何工作?
我想知道为什么可以设置PictureBox的Image属性,而Image类是抽象类,因此无法实例化 Image.FromFile()方法是否创建位图(从Image派生的类),然后用于在PictureBox中显示?如果是,则在从非.bmp文件创建图像时,如果例如我使用: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文件之前,它会在内存中将其转换为位图吗 我知道如何做以上所有的事情,我知道它是有效的,但我只是想弄清楚当图像是抽象的时候它是如何工作的,因为我无法找到关于这
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”)
是一个示例,它通常返回抽象基类或接口以更好地隐藏实现细节。