次の方法で共有


CImage クラス

更新 : 2007 年 11 月

CImage はビットマップの拡張サポートを提供するクラスです。たとえば、JPEG、GIF、BMP、PNG (Portable Network Graphics) 形式のイメージの読み込みや保存などができます。

class CImage

解説

CImage クラスを使用すると、デバイスに依存しないビットマップ (DIB: Device-Independent Bitmap) セクションのビットマップも DIB セクション以外のビットマップも処理できますが、CreateCImage::Load を使用できるのは DIB セクションのビットマップだけです。DIB セクション以外のビットマップは、Attach を使用して CImage オブジェクトに割り当てることができます。ただし、次に示す CImage のメソッドは、DIB セクション ビットマップだけをサポートしており、DIB セクション以外のビットマップには使用できません。

割り当てられているビットマップが DIB セクションかどうかを確認するには、IsDibSectionを呼び出します。

bwea7by5.alert_note(ja-jp,VS.90).gifメモ :

メモ   Visual Studio .NET 2003 では、このクラスは作成された CImage オブジェクトの数を保持します。オブジェクトの数が 0 になると、GdiplusShutdown 関数が自動的に呼び出され、GDI+ が使用しているリソースが解放されます。そのため、DLL が直接または間接的に作成した CImage オブジェクトはすべて適切に破棄され、DllMain からの GdiplusShutdown の呼び出しは行われません。

bwea7by5.alert_note(ja-jp,VS.90).gifメモ :

DLL でのグローバル CImage オブジェクトの使用はお勧めできません。DLL でグローバル CImage オブジェクトを使用する必要がある場合は、CImage::ReleaseGDIPlus を呼び出して、GDI+ が使用しているリソースを明示的に解放します。

CImage は、新しい CDC には選択できません。CImage は、イメージの HDC を独自に作成します。HBITMAP は一度に 1 つの HDC にしか選択できないため、CImage オブジェクトに関連付けられている HBITMAP を他の HDC に選択することはできません。CDC が必要な場合は、CImage オブジェクトから HDC を取得し、それを CDC::FromHandle に渡します。

使用例

// Get a CDC for the image
CDC* pDC = CDC::FromHandle(m_myImage.GetDC());

// Use pDC here
pDC->Rectangle(0, 40, 100, 50);

m_myImage.ReleaseDC();

MFC プロジェクトで CImage を使用するときは、プロジェクトのどのメンバ関数が CBitmap オブジェクトへのポインタを必要とするのかを確認してください。CMenu::AppendMenu など、そのような関数で CImage を使用するには、CBitmap::FromHandleCImageHBITMAP を渡し、戻り値の CBitmap* を使用します。

void CMyDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
   UNREFERENCED_PARAMETER(nFlags);

   CBitmap* pBitmap = CBitmap::FromHandle(m_myImage);
   m_pmenuPop->AppendMenu(0, ID_BMPCOMMAND, pBitmap);
   ClientToScreen(&point);
   m_pmenuPop->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN, point.x, 
      point.y, this);
}

CImage を使用すると、DIB セクションをビット単位で操作できます。CImage オブジェクトは、Win32 HBITMAP や DIB セクションを以前に使用したことがあればどこでも利用できます。

bwea7by5.alert_note(ja-jp,VS.90).gifメモ :

使用上の制限事項がある CImage のメソッドを次に示します。

メソッド

制限事項

PlgBlt

Windows NT 4.0 以降のシステムだけで動作します。Windows 95/98 以降で動作するアプリケーションには使用できません。

MaskBlt

Windows NT 4.0 以降のシステムだけで動作します。Windows 95/98 以降で動作するアプリケーションには使用できません。

AlphaBlend

Windows 2000 および Windows 98 以降のシステムだけで動作します。

TransparentBlt

Windows 2000 および Windows 98 以降のシステムだけで動作します。

Draw

透過が有効なのは、Windows 2000 および Windows 98 以降のシステムだけです。

これらの制限事項の詳細については、「以前のオペレーティング システムにおける CImage の制限」を参照してください。

CImage は、MFC と ATL のどちらでも使用できます。

bwea7by5.alert_note(ja-jp,VS.90).gifメモ :

CImage を使用しているプロジェクトでは、atlimage.h をインクルードする前に、必ず CString を定義してください。ATL を使用し、MFC を使用しないプロジェクトでは、atlimage.h より先に atlstr.h をインクルードします。MFC を使用するプロジェクト (または MFC にも対応している ATL プロジェクト) では、atlimage.h より先に afxstr.h をインクルードします。

同様に、atlimage.h は atlimpl.cpp より先にインクルードする必要があります。これを行うには、stdafx.h 内で atlimage.h をインクルードする方法が簡単です。

必要条件

ヘッダー : atlimage.h

参照

処理手順

MMXSwarm サンプル : CImage と Visual C++ MMX サポート

SimpleImage サンプル : イメージの読み込み、サイズ変更、変換、および保存

参照

Device-Independent Bitmaps

CreateDIBSection

その他の技術情報

CImage のメンバ

ATL リファレンス