読みづらいし、試しづらかった。入力画像を誤ると破綻するものだった。そのためここではクラス化して少しはまともなスケルトンを作った。実行例ソースコード以下のコードを「DnpImageBase.h」というファイル名で保存。各種画像処理を施したいときはこのクラスCDnpImageにメンバー関数として加える。nStrideBytes;}UnlockBits();returntrue;}};以下のソースコードを「DnpImageBase.h」というファイル名で保存する。Gdiplus;#pragmacomment(lib,"Gdiplus.lib")////このクラスを利用するには、プログラム起動時にInitialize()を、//終了時にUninitialize()を呼び出さないとダメ//classCDnpImageBase{////表示用サムネイル管理クラス////本当はImage::GetThumbnailImage()を使った方がいいのだが、//画像処理をしてもその結果が反映されないので::StretchBltを//使っている。false;}};CThumbnail_cThumbnail;//表示用の縮小画像管理クラスprotected:Bitmap*_pMainImage;//読み込んだ画像オブジェクト//サムネイルの作成が必要かどうか//_pMainImageを画像処理したら_pMainImageと_pThumbnailで画像が異なってしまう。NULL;_cThumbnail.Init();}////GDI+の初期化////この関数はアプリケーション開始時に一度だけ呼ぶこと//呼ばないとこのクラス自体が使えません。false)return0;return_pMainImage->GetHeight();}////画像が読み込まれているかチェック////このクラスに現在画像が読み込まれているかを調べる。0){Init();returnfalse;}returntrue;}////クラスの複製////このクラスに現在読み込まれている画像をcCopyToにコピーする//あくまでも"コピー"になることに注意。参照ではないのでcCopyTo//に画像処理を施してもこのクラス内の画像に影響はない。false)returnfalse;returncCopyTo.SetBitmap(pBitmap);}////ビットマップ指定////現在読み込まれている画像を破棄して、pBitmapのコピーを読み込む。pBitmap->Clone(Rect(0,0,pBitmap->GetWidth(),pBitmap->GetHeight()),PixelFormatDontCare);returnIsValidImage();}////ビットマップの複製取得////現在読み込まれている画像のBitmapを複製して渡す。//取得したBitmapを画像処理しても、このクラス内の画像には影響しない。NULL;returnfalse;}returntrue;}////画像の描画////指定したDCに対して画像を描画する。false;}return_cThumbnail.Draw(hDC,nX,nY);}private:bool_bLockBitmap;BitmapData_sLockBitmapData;public:////画像編集用にRGB配列取得////ppcbRGBDataに読み込まれている画像の生データ、pnStrideBytesに画像の横一列に使われているバイト数が返る。////取り出した画像*ppcbRGBDataはRGBTRIPLE配列で並んでいる。この例ではプロジェクト名を「ImageEffect114」にしている。