System.Drawing.Image
とSystem.Drawing.Bitmap
の違いがわかりません。
誰かがこれらの2つのタイプの主な違いを説明できますか?
そして、なぜSystem.Drawing.Imageの代わりにSystem.Drawing.Bitmapを使用するのですか?
Bitmap
はImage
から継承します。
System.Drawing.Bitmap : System.Drawing.Image
{ }
Image
は抽象クラスであり、これは次のことを意味します。
抽象修飾子は、変更されるものの実装が欠落しているか不完全であることを示します。
Bitmap
は封印されたクラスです。つまり、次のことを意味します。
クラスに適用されると、封印された修飾子は他のクラスがクラスから継承するのを防ぎます。
以下を参照してください。
Bitmap bmp = new Bitmap(filename); // Works
Image img = new Image(); // The compiler says: "Cannot access internal constructer 'Image' here.
これは、Image
がこのように使用されることを意図していないためです。 Bitmap
クラスの機能を提供するだけです。
したがって、jpeg、png、bmpなどのピクセル化された画像を処理する場合は、Bitmap
を使用します。
メソッドに特定のタイプの画像がないと予想され、Image
のメソッドで十分な場合は、より一般的なImage
をパラメータータイプとして使用します。このメソッドは、Image
から継承する他のクラス(たとえば、Metafile
)も受け入れます。
違いの意味がわかりませんか?
System.Drawing.Image
は、System.Drawing.Bitmap
の基本クラスです。
System.Drawing.Image
も抽象クラスであるため、そのインスタンスを作成することはできません。 System.Drawing.Bitmap
のインスタンスのみを作成する必要があります。
Image.FromFile
、Image.BlahBlah ...はBitmap
のインスタンスのみを返します。
MSDNのドキュメントにSystem.Drawing.Image
について明確に記載されているように:
ビットマップおよびメタファイルの子孫クラスに機能を提供する抽象基本クラス。
したがって、それらを比較することはできません。 System.Drawing.Bitmap
クラスは、抽象System.Drawing.Image
クラスの具体的な実装です。
Imageは、ラスターイメージを表す基本抽象クラスです。ビットマップは、GDI +に基づくこの抽象クラスの1つの実装です。