Programming/Windows API
BitBlt함수는 인수로 지정된 해당 Device Context의 특정 영역을 Bitmap으로 복사하는 함수입니다.

Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDC As Integer, ByVal xSrc As Integer, ByVal ySrc As Integer, ByVal dwRop As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int BitBlt(int hDestDC, int x, int y, int nWidth, int nHeight, int hSrcDC, int xSrc, int ySrc, int dwRop);
▶C# 선언

BitBlt의 첫번째 함수는 복사하여 붙여넣을 대상 Device Context를 기술하며 여섯번째 인수는 복사할 대상의 Device Context를 기술합니다.

[Develop/Windows API] - GetDC - Window및 Control의 Device Context 구하기
[Develop/Windows API] - GetWindowDC - 현재 Windows화면의 Device Context 구하기

두번째와 세번째 인수는 복사할 대상의 복사위치를 지정하는 인수이며 네번째, 다섯번째 인수는 복사대상의 복사영역을 지정하는 인수입니다.

일곱번째와 여덟번째 인수에는 복사된 Bitmap을 표시할 대상 Device Context의 위치를 지정합니다. 마지막 아홉번째 인수는 대상 Device Context에 복사된 Bitmap영역을 표시할때 어떠한 방식으로 표시할지를 지정하는 부분으로 다음과 같은 상수를 사용할 수 있습니다.

 상수  값  설명
 BLACKNESS  42  검은색으로 표시
 DSTINVERT  550009  대상을 반전
 MERGECOPY  C000CA  원본과 대상을 AND조합
 MERGEPAINT  BB0226  원본과 대상을 OR조합
 NOTSRCCOPY  330008  원본을 반전
 NOTSRCERASE  1100A6  원본과 대상을 OR조합/반전
 PATCOPY  F00021  pattern 복사
 PATINVERT  5A0049  대상을 pattern과 XOR조합
 PATPAINT  FB0A09  pattern을 반전과 OR조합
 SRCAND  8800C6  원본을 AND연산
 SRCCOPY  CC0020  복사
 SRCERASE  440328&  반전된 대상을 원본과 AND연산
 SRCINVERT  660046  원본과 대상을 XOR조합
 WHITENESS  HFF0062&  흰색으로 표시

값에서 VB.NET은 &H, C#은 0x로 16진수를 표시합니다.

함수 사용은 예를 들어 Picturebox1에 그려져 있는 이미지를 왼쪽 10에서 가로 50만큼, 위쪽 10에서 세로 70만큼 복사하여 Picturebox2에 표시하는 Program을 만드려면 다음과 같이 호출될 수 있습니다.

Const SRCCOPY As Integer = &HCC0020

Dim idcd, idcs As Integer
idcs = GetDC(PictureBox1.Handle)
idcd = GetDC(PictureBox2.Handle)

BitBlt(idcd, 10, 10, 50, 70, idcs, 0, 0, SRCCOPY)

▶VB.NET 호출

const int SRCCOPY = 0xCC0020;

int idcd, idcs;
idcd = GetDC((int)pictureBox1.Handle);
idcd = GetDC((int)pictureBox2.Handle);

BitBlt(idcd, 10, 10, 50, 70, idcs, 0, 0, SRCCOPY);

▶C# 호출

복사대상이나 표시할대상에 Picturebox Control의 Device Context를 지정하였지만 BitBlt함수는 사실 Image를 대상으로 복사하고 표시하는 것이 아니라 단순 Device Context를 대상으로 복사를 수행하는 것입니다.

이는 Image뿐만 아니라 Device Context로 지정될 수 있는 거의 모든 Object의 표시화면을 복사할 수 있다는 의미가 됩니다.
0 0