目次に戻る
一覧ページに戻る
CPImage::GetPointer
2001/12/24 update.
画像の開始ポインタを取得します。

書式

  void *GetPointer();

パラメータ


戻り値
画像描画領域の開始位置(ポインタ)が返されます。

解説


画像の描画開始位置が返されます。これにより、直接画像をポインタ操作することができます。
1ピクセルは各1バイトごとのRGBA情報を持ち、4バイトで構成されます。

各RGBA要素は、0から255の間の整数になります(unsigned char型)。
1ライン分のバイト数は画像サイズ×4(「GetLineBytes」の戻り値)となります。

※ただし、現在はA(α値)は未使用です。

注意!!
画像へのポインタを直接操作する、ということは、画像のメモリの外にアクセスしてしまった場合、アプリケーション(またはOS)をフリーズさせる原因にもなりかねます。
十分に注意を払ってご使用ください。





指定の座標(x,y)にRGB=(rr,gg,bb)の点を打つ例です。

void MySetPixel(CPImage *lpImage,int x,int y,int rr,int gg,int bb)
{
    int width,height;
    int scanLines;
    unsigned char *lpPos;

    if(!lpImage) return;

    //イメージの幅と高さを取得
    width=lpImage->GetImageWidth();
    height=lpImage->GetImageHeight();

    if(x<0 || x>=width || y<0 || y>=height) return;

    //イメージの開始ポインタを取得
    lpPos=(unsigned char *)(lpImage->GetPointer());
    if(!lpPos) return;

    //1ライン分のバイト数を取得
    scanLines=lpImage->GetLineBytes();

    //(x,y)の位置へ、ポインタを移動
    lpPos+=(x << 2) + scanLines*y;

    //RGB値の書き込み
    *lpPos     = (unsigned char)rr;
    *(lpPos+1) = (unsigned char)gg;
    *(lpPos+2) = (unsigned char)bb;
}



ビルド時に必要なファイル


ライブラリ :CPartsLib.lib (Macintoshの場合は、CPartsCW.a)
ヘッダ :CPImage.h


関連リンク


CPImageクラス
CPImage::GetLineBytes