CImage クラス

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を呼び出します。

注意

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

注意

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 セクションを以前に使用したことがあればどこでも利用できます。

注意

使用上の制限事項がある 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 のどちらでも使用できます。

注意

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 サンプル:読み込み、Resizes、変換、および保存のイメージ

参照

Device-Independent Bitmaps

CreateDIBSection

その他の技術情報

CImage のメンバー

ATL リファレンス