web-dev-qa-db-ja.com

画像とビットマップクラス

ImageクラスとBitmapクラスの違いを理解するのに苦労しています。今、私はBitmapImageから継承していることを知っていますが、私が理解していることからは両方とも非常に似ています。誰かがこれに光を当てることができますか?

64
user116864

Bitmapクラスは、Imageクラスの実装です。 Imageクラスは抽象クラスです。

Bitmapクラスには、さまざまなパラメーターからBitmapオブジェクトを構築する12のコンストラクターが含まれています。別のビットマップからビットマップ、および画像の文字列アドレスを構築できます。

詳しくは この包括的なサンプル をご覧ください。

64
Richard

これは、正直なところ紛らわしいコードで行われていることを見たことがあるので、明確になっています-次の例は他の人を助けるかもしれないと思います。

他の人が以前に言ったように-ビットマップは抽象から継承しますイメージクラス

抽象は、事実上、そのNew()インスタンスを作成できないことを意味します。

    Image imgBad1 = new Image();        // Bad - won't compile
    Image imgBad2 = new Image(200,200); // Bad - won't compile

しかし次のことができます:

    Image imgGood;  // Not instantiated object!
    // Now you can do this
    imgGood = new Bitmap(200, 200);

次の操作を行った場合、同じビットマップオブジェクトと同じようにimgGoodを使用できるようになりました。

    Bitmap bmpGood = new Bitmap(200,200);

ここでいいことは、Graphicsオブジェクトを使用してimgGoodオブジェクトを描画できることです。

    Graphics gr = default(Graphics);
    gr = Graphics.FromImage(new Bitmap(1000, 1000));
    Rectangle rect = new Rectangle(50, 50, imgGood.Width, imgGood.Height); // where to draw
    gr.DrawImage(imgGood, rect);

ここでimgGoodanyになります。Imageオブジェクト-ビットマップ、メタファイル、またはImageを継承するその他のもの!

37
David Carta

Imageは、任意の画像への抽象的なアクセスを提供し、Imageの実装に論理的に適用できる一連のメソッドを定義します。その特定の画像形式または実装に制限されていません。ビットマップは、windows GDIビットマップオブジェクトをカプセル化する画像抽象クラスの特定の実装です。ビットマップは、GDI =ビットマップオブジェクト。

たとえば、Imageクラスから継承して抽象メソッドを実装することにより、Image abstractに独自の実装を作成できます。

とにかく、これはOOPの単純な基本的な使用であり、キャッチするのは難しくないはずです。

11
user88637