C++におけるBitBltの使い方について詳しく説明します。

3421 ワード

BitBlt
この関数は、指定されたソースデバイスの環境領域のピクセルに対してビットブロックを行います。block)変換は、対象機器環境に転送される。
プロトタイプ:  

BOOL BitBlt(

  HDC hdcDest,

  int nXDest, int nYDest, int nWidth, int nHeight,

  HDC hdcSrc,

  int nXSrc, int nYSrc,

  DWORD dwRop);

パラメータ:   
hdcDest:対象設備環境のハンドルを指す。
nXDest、nYDest:対象矩形領域の左上隅のX軸とY軸論理座標を指定します。
nWidth、nHeight:ソースとターゲット矩形領域の論理幅と論理高さを指定します。
hdcSrc:ソースデバイス環境を指すハンドル。
nXSrc,nYSrc:ソース矩形領域の左上隅のX軸とY軸論理座標を指定します。
dwRop:格子操作コードを指定します。これらのコードはソース矩形領域の色データを定義します。ターゲット矩形領域の色データとどのように組み合わせて最後の色を完成しますか?いくつかの一般的なラスター操作コードを以下に示します。

説明
BLACKNESS
は、物理的なカラーパレットのインデックス0に関する色を使用して、ターゲット矩形領域を塗りつぶします。
DSTINVRT
ターゲット矩形領域の色を反転させることを表します。
MERGECOPY 
は、ブール型ANDを使用して、ソース矩形領域の色を特定のモードと組み合わせて操作することを表します。
MERGEPAINT
ブール型OR(または)オペレータを使用して、ソース矩形領域の色を反転させ、ターゲット矩形領域の色と結合します。
NOTSRCCOPY
ソース矩形領域の色を反転して、対象矩形領域にコピーします。
NOTSRCERASE
ブールタイプのOR(または)オペレータのソースとターゲット矩形領域の色値を組み合わせて合成した色を反転します。
PATCOPY
特定のパターンをターゲットビットマップにコピーします。
PATINVRT
ブール型XOR(排他的)オペレータを使用して、ソースとターゲット矩形領域の色を結合します。
PATPAINT
ブール型OR(または)オペレータを使用して、ソース矩形領域を反転した色の値を特定のモードの色に結合します。その後OR(または)オペレータを使用して、この操作の結果を対象の矩形領域の色とマージします。
SRCAND
ブール型AND(と)オペレータを使用して、ソースとターゲット矩形領域内の色を合成します。
SRCCOPY
ソース矩形領域を対象矩形領域に直接コピーします。
SRCERASE
対象の矩形領域の色を、ブール型AND(と)オペレータを使用して反転し、ソース矩形領域の色値と統合します。
SRCINVRT
ブール型XOR(排他的)オペレータを使用して、ソースとターゲット矩形領域の色を結合します。
SRCPAINT
ブール型OR(または)オペレータを使用して、ソースとターゲット矩形領域の色を合成します。
WHITENESS
物理カラーパレットのインデックス1に関する色を使用して、ターゲット矩形領域に塗りつぶします。デフォルトの物理パレットにとって、この色は白色です)。
  完全なラスター操作(ROP)コードは、Ternary Raster Operationsを参照してください。
戻り値:
   関数が成功したら、ゼロではない値を返します。関数が失敗した場合、戻り値はゼロです。GetLastErrer関数を呼び出して拡張エラー情報を取得します。
説明:
   ソースデバイス環境において回転または剪断変換が可能である場合、関数BitBltはエラーを返します。
   他の変換がある場合(対象機器環境での整合変換が無効)、対象機器環境の矩形領域は必要に応じて引張り、圧縮、回転する。
   ソースとターゲットデバイス環境の色フォーマットが一致しない場合、BitBlt関数は、ソースシーンの色フォーマットを、ターゲットフォーマットにマッチする成能のフォーマットに変換する。
   拡張されたツーピースファイルが記録されている場合、ソースデバイス環境が拡張されたツーピースファイル環境として識別されると、エラーが発生します。
   すべてのデバイスがBitBlt関数をサポートしているわけではない。より多くの情報は、Get DeviceCaps関数を呼び出し、第二のパラメータの割り当て値をRC_とする。BITBLTは、デバイスがサポートされているかどうかを確認する。For more information、see the RC_BITB LT raster capability entry in the Get DeviceCaps function,as well as the Mask Blt and Stretch Blit functions.)
   ソースとターゲットデバイス環境が異なるデバイスを表す場合、BitBlt関数はエラーを返します。
   右から左への表示情報の転送については、Creating Bitmapsを参照してください。
   Windows CE 1.0と1.01版では、パラメータdwRopは以下の値のみに指定できます。SRCCOPY、SRCAND、SRCPAINT、SRCINVRT。Windows CE 2.0および以降のバージョンでは、パラメータdwRopは任意のROP 3コード値であってもよい。
 以下はMSDN上の例である。

HBITMAP CopyBitmap( HBITMAP hbm) {
  HDC hdcSrc = CreateCompatibleDC(NULL);
  HDC hdcDst = CreateCompatibleDC(NULL);
  HBITMAP hbmOld, hbmOld2, hbmNew;
  BITMAP bm;
  GetObject(hbm, sizeof(bm), &bm);
  hbmOld = SelectObject(hdcSrc, hbm);
  hbmNew = CreateBitmap( bm.bmWidth, bm.bmHeight, bm.bmPlanes,
    bm.bmBitsPixel,
    NULL);
  hbmOld2 = SelectObject(hdcDst, hbmNew);
  BitBlt(hdcDst, 0, 0, bm.bmWidth, bm.bmHeight, hdcSrc, 0, 0, SRCCOPY);
  SelectObject(hdcSrc, hbmOld);
  SelectObject(hdcDst, hbmOld2);
  DeleteDC(hdcSrc);
  DeleteDC(hdcDst);
  return hbmNew;
} 

疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。