web-dev-qa-db-ja.com

System.Drawing.ImageとSystem.Drawing.Bitmapの違いは何ですか?

System.Drawing.ImageSystem.Drawing.Bitmapの違いがわかりません。

誰かがこれらの2つのタイプの主な違いを説明できますか?

そして、なぜSystem.Drawing.Imageの代わりにSystem.Drawing.Bitmapを使用するのですか?

14
Kas

BitmapImageから継承します。

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)も受け入れます。

13
Andy

違いの意味がわかりませんか?

System.Drawing.Imageは、System.Drawing.Bitmapの基本クラスです。

System.Drawing.Imageも抽象クラスであるため、そのインスタンスを作成することはできません。 System.Drawing.Bitmapのインスタンスのみを作成する必要があります。

Image.FromFile、Image.BlahBlah ...はBitmapのインスタンスのみを返します。

4

MSDNのドキュメントにSystem.Drawing.Imageについて明確に記載されているように:

ビットマップおよびメタファイルの子孫クラスに機能を提供する抽象基本クラス。

したがって、それらを比較することはできません。 System.Drawing.Bitmapクラスは、抽象System.Drawing.Imageクラスの具体的な実装です。

3
Jensen

Imageは、ラスターイメージを表す基本抽象クラスです。ビットマップは、GDI +に基づくこの抽象クラスの1つの実装です。

1
Arul Dinesh