icubic library reference
サーフェスの作成
概要
サーフェスは描画するためのビットマップです。

サーフェスの作成から転送(Windows)
サーフェスの作成
サーフェスを作成します。サーフェスはWindows互換とオリジナルとがあります。HDCに転送するにはWindows互換である必要があります。
//iCubicオリジナルのRGBAサーフェースの作成
iSurface surface = CreateSurface( isize(100,100) , rgba_pixelformat );

//HDCをもつRGBサーフェースの作成(Windows互換)
iSurface surface = CreateSurface_win_rgb( isize(100,100) );

サーフェスのピクセルにアクセス
サーフェスのピクセルにアクセスします。サンプルでは全体を赤で塗りつぶしています。サーフェスはGetDestAvailableArea内にしか描画してはならない。

//ピクセルへのポインタとピッチバイトの獲得
int pitchbyte;
unsigned char* p = (unsigned char*)surface->GetDestPixelPtr( &pitchbyte );

//サーフェスの有効領域の獲得
irect av = surface->GetDestAvailableArea();

//有効領域を赤で描画する
int x , y , pixelbyte = get_pixel_byte( surface->GetDestFormat() );
unsigned char* py = p + av.ymin * pitchbyte;
for( y = 0 ; y < av.Height() ; y++ )
{
    unsigned char* px = py + av.xmin * pixelbyte;
    for( x = 0 ; x < av.Width() ; x++ )
    {
        //RGBフォーマットなので先頭の1バイトはPadding
        px[1] = 0xFF;
        px[2] = 0x00;
        px[3] = 0x00;
        px += pixelbyte;
    }
    py += pitchbyte;
}


サーフェスを転送
サーフェスをHDCに転送します。
//hdcの獲得
irect v , a;
HDC s_hdc = surface->GetSourceHDC( &v , &a );

//Windowに転送
::BitBlt( hdc , v.xmin + a.xmin , v.ymin + a.ymin , a.Width() , a.Height() , s_hdc , v.xmin + a.xmin , v.ymin + a.ymin , SRCCOPY );

出力結果
サンプルの出力結果