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를 기술합니다.
[Windows API for .NET] - GetDC - Window및 Control의 Device Context 구하기
[Windows API for .NET] - 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의 표시화면을 복사할 수 있다는 의미가 됩니다.
'.NET > Windows API for .NET' 카테고리의 다른 글
Rectangle - 사각형 그리기 (0) | 2019.08.09 |
---|---|
RoundRect - 모서리가 둥근 사각형 그리기 (0) | 2019.08.09 |
ShowCursor - Mouse Cursor의 숨김/해제 (0) | 2019.08.09 |
StretchBlt - 지정된 영역을 Bitmap복사 (0) | 2019.08.06 |
GetLocalTime - System상의 지역과 관련된 날짜및 시간구하기 (0) | 2019.08.06 |