imageクラスについて

タグの編集
投稿者 デフォルト  (社会人) 投稿日時 2009/7/13 22:57:41
VB2008です。
最近、グラフィック関係に興味をもって学んでいます。

愚問かもしれませんが、imageクラスから直接インスタンスを作成できないのはなぜなのですか?
(そういうきまりじゃ)といわれればそうだと思うのですが
投稿者 brv  (中学生) 投稿日時 2009/7/13 23:39:35
Imageクラスには、インスタンスを作成するためのメンバがあります。
ファイルから読み込むとしたらこんな感じ↓
Dim img As Image = Image.FromFile("C:\Sample1.bmp")


Bitmapクラスを使う手もあります↓
Dim img As Image = New Bitmap("C:\Sample1.bmp")
投稿者 よねKEN  (社会人) 投稿日時 2009/7/14 02:18:41
System.Drawing.Imageは抽象クラスで、その派生クラスには、
・System.Drawing.Bitmap というビットマップ画像(≠拡張子がbmpの画像)を現すクラス、
・System.Drawing.Imaging.Metafile というベクター画像を現すクラスがあります。
Imageクラスが抽象クラスであるのに対して、BitmapやMetafileは具象クラスといいます。

ビットマップ画像は、ドットの集まりで表現する形式の画像で、
ベクター画像は、線の両端の座標、曲線の曲がり具合、太さ、色などの形状で表現する形式の画像です。

BitmapクラスやMetafileクラスは内部の表現形式を規定した具体的な画像を現しているのに対して、
Imageクラスはより抽象的な意味での画像を現すクラスになっています。
画像をどのように表現するのかをImageクラスは知りませんので、Imageクラスのインスタンスは生成できません。

なぜこのようになっているか?と聞かれれば、設計者がそのように設計したから、です。

ちなみに、Image.FromFileメソッドやImage.FromStreamメソッドは、
指定した画像によりBitmapクラスかMetafileクラスのインスタンスを生成して返します。



投稿者 デフォルト  (社会人) 投稿日時 2009/7/14 16:30:51
brv さん、  よねKENさん、詳しい説明ありがとう。感謝します。