C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 18 を表示中)
■7302 / )  Re[4]: Imageクラスの継承
□投稿者/ Hongliang (184回)-(2007/09/03(Mon) 15:56:41)
Hongliang さんの Web サイト
> さらなBitmapインスタンスを作成して、そこから
> Graphics.FromImage メソッド
> http://msdn2.microsoft.com/ja-jp/library/system.drawing.graphics.fromimage(VS.80).aspx
> でGraphicsのオブジェクト得て、
> Graphics.DrawImage メソッド
> http://msdn2.microsoft.com/ja-jp/library/system.drawing.graphics.drawimage(VS.80).aspx
> でもとのImageをそこに描画してしまえば、その内部のBitmapができると思います。

それは論点が違うと思いますが……。
Image オブジェクトから Bitmap オブジェクトがほしいなら Bitmap(Image) コンストラクタを使えば基本的に十分です。
// 元オブジェクトのクローンである点には気をつける必要がありますが。


一番の問題は、LockBits している間はその Bitmap オブジェクトの一部メソッドが阻害されると言う点です。また、UnlockBits するまではそのポインタに適用した変更が Bitmap オブジェクトに反映されません。
Image から派生させたクラスを作れたとして、そのインスタンス生成時に LockBits して破棄時に UnlockBits するような構造だと実質使い物になりません。
かといって、毎回 LockBits/UnlockBits するような構造にするぐらいなら GetPixel/SetPixel した方がマシです。
必要な間だけロックするようにすればいい、と言うのは Bitmap クラスの実装と全く同じです。別クラスで表現する意味がありません。
BitmapData から任意の座標を計算するのが面倒なら、そういうメソッドを用意してやればいいだけで、それは派生クラスでなくても可能です。

てことで、結局 ExBitmap : IDisposable みたいな実装が妥当な形になります。
// これはこれで色々問題があるようですが……まあ自分で使う分には。

以上、取り敢えず実装的な面から。オブジェクト指向的意味論からも否定できそうですが。
返信 編集キー/


管理者用

- Child Tree -