다음을 통해 공유


DrvBitBlt 함수(winddi.h)

DrvBitBlt 함수는 디바이스 관리형 표면 간, GDI 관리 표준 형식 비트맵 간 또는 디바이스 관리형 표면과 GDI 관리 표준 형식 비트맵 간에 일반적인 비트 블록 전송 기능을 제공합니다.

구문

BOOL DrvBitBlt(
  [in, out]      SURFOBJ  *psoTrg,
  [in, optional] SURFOBJ  *psoSrc,
  [in, optional] SURFOBJ  *psoMask,
  [in]           CLIPOBJ  *pco,
  [in, optional] XLATEOBJ *pxlo,
  [in]           RECTL    *prclTrg,
  [in, optional] POINTL   *pptlSrc,
  [in, optional] POINTL   *pptlMask,
  [in, optional] BRUSHOBJ *pbo,
  [in, optional] POINTL   *pptlBrush,
  [in]           ROP4     rop4
);

매개 변수

[in, out] psoTrg

그릴 표면을 설명하는 SURFOBJ 구조체에 대한 포인터입니다.

[in, optional] psoSrc

rop4 매개 변수에 필요한 경우 비트 블록 전송 작업의 원본을 설명하는 SURFOBJ 구조체에 대한 포인터입니다.

[in, optional] psoMask

rop4 매개 변수의 마스크로 사용할 표면을 설명하는 SURFOBJ 구조체에 대한 포인터입니다. 마스크는 픽셀당 1비트인 비트맵입니다. 일반적으로 마스크는 대상 화면에서 수정할 영역을 제한하는 데 사용됩니다. rop4 매개 변수를 0xAACC 값으로 설정하여 마스킹을 선택합니다. 마스크가 0x0000 경우 대상 표면은 영향을 받지 않습니다.

마스크는 대상 사각형을 덮을 수 있을 만큼 커야 합니다.

이 매개 변수가 NULL 이고 rop4 매개 변수에 마스크가 필요한 경우 브러시의 암시적 마스크가 사용됩니다.

[in] pco

수정할 영역을 제한하는 CLIPOBJ 구조체에 대한 포인터입니다. 클립 영역을 사각형 집합으로 열거하는 GDI 서비스(CLIPOBJXxx)가 제공됩니다. 가능하면 GDI는 관련된 클리핑을 간소화합니다. 예를 들어 이 함수는 단일 클리핑 사각형으로 호출되지 않습니다. GDI는 이 함수를 호출하기 전에 대상 사각형을 잘라내어 추가 클리핑을 불필요하게 만듭니다.

[in, optional] pxlo

원본 표면과 대상 표면 간에 색 인덱스를 변환하는 방법을 지정하는 XLATEOBJ 구조체에 대한 포인터입니다. pxloNULL인 경우 변환이 필요하지 않습니다.

원본 표면이 색상표로 관리되는 경우 해당 색은 인덱스로 RGB 값의 조회 테이블로 표시됩니다. XLATEOBJ 구조체는 디바이스 드라이버가 원본 인덱스 를 대상의 색 인덱스로 변환할 수 있도록 변환 벡터에 대해 쿼리할 수 있습니다.

예를 들어 원본이 RGB이지만 대상이 팔레트 관리인 경우 상황은 더 복잡합니다. 이 경우 대상 팔레트에서 각 원본 RGB 값과 가장 가까운 일치 항목을 찾아야 합니다. 드라이버는 XLATEOBJ_iXlate 서비스를 호출하여 이 작업을 수행할 수 있습니다.

필요에 따라 대상 팔레트가 기본 디바이스 팔레트인 경우 디바이스 드라이버가 색을 일치시킬 수 있습니다.

[in] prclTrg

수정할 영역을 정의하는 RECTL 구조체에 대한 포인터입니다. 이 구조체는 대상 표면의 좌표계를 사용합니다. 이 사각형의 아래쪽 및 오른쪽 가장자리는 비트 블록 전송의 일부가 아니므로 직사각형은 오른쪽 아래에 배타적입니다.

DrvBitBlt 는 빈 대상 사각형으로 호출되지 않습니다. 사각형을 정의하는 두 점은 항상 순서가 잘 정렬됩니다. 그러나 다중 모니터 시스템에서 사각형은 대상 표면보다 큰 영역을 정의할 수 있습니다. 드라이버는 이 사각형을 표면과 교차해야 합니다.

[in, optional] pptlSrc

원본이 있는 경우 원본 사각형의 왼쪽 위 모서리를 정의하는 POINTL 구조체에 대한 포인터입니다. 원본이 없는 경우 이 매개 변수는 무시됩니다.

[in, optional] pptlMask

원본이 있는 경우 원본 사각형의 왼쪽 위 모서리에 해당하는 마스크의 픽셀을 정의하는 POINTL 구조체에 대한 포인터입니다. psoMask 매개 변수가 NULL인 경우 이 매개 변수는 무시됩니다.

[in, optional] pbo

비트 블록 전송에 대한 패턴을 정의하는 BRUSHOBJ 구조체에 대한 포인터입니다. GDI의 BRUSHOBJ_pvGetRbrush 서비스를 사용하여 디바이스의 브러시 실현을 검색할 수 있습니다. rop4 매개 변수에 패턴이 필요하지 않은 경우 이 매개 변수는 무시됩니다.

[in, optional] pptlBrush

대상 화면에서 브러시의 원점을 정의하는 POINTL 구조체에 대한 포인터입니다. 브러시의 왼쪽 위 픽셀은 이 시점에서 정렬되고 브러시는 해당 차원에 따라 반복됩니다. rop4 매개 변수에 패턴이 필요하지 않은 경우 이 매개 변수는 무시됩니다.

[in] rop4

마스크, 패턴, 원본 및 대상 픽셀을 결합하여 대상 화면에 쓰는 방법을 정의하는 래스터 작업을 지정합니다.

이는 3차 래스터 연산의 확장인 3차 래스터 작업입니다. Rop4에는 Rop3의 8개 정의 비트와 유사한 16개의 관련 비트가 있습니다. Rop4를 구현하는 가장 간단한 방법은 2바이트를 별도로 고려하는 것입니다. 낮은 바이트는 마스크가 1인 경우 계산해야 하는 Rop3을 지정하고, 높은 바이트는 마스크가 0인 경우 계산 및 적용할 수 있는 Rop3을 지정합니다.

반환 값

비트 블록 전송 작업이 성공하면 DrvBitBlt에서 TRUE 를 반환합니다. 그렇지 않으면 함수가 FALSE를 반환하고 오류 코드가 기록됩니다.

설명

드라이버가 DrvBitBlt를 후크하는 경우 GDI는 표면 중 하나가 디바이스 관리 표면인 BitBlt 작업을 수행해야 할 때 이 함수를 호출합니다. 드라이버가 불투명 디바이스 관리 비트맵을 구현하는 경우 DrvBitBlt를 후크해야 합니다. 그렇지 않으면 DrvBitBlt 후킹은 선택 사항입니다. 드라이버가 지정된 호출을 처리할 수 없는 경우 EngBitBlt를 호출하여 DIB 엔진에 대한 콜백을 처리할 수 있습니다.

GDI의 CLIPOBJXxx 서비스를 사용하면 클리핑을 일련의 클리핑 사각형으로 줄일 수 있습니다. 번역 벡터는 색상표의 색 인덱스 변환을 지원합니다.

참고ROP 가 필요하다고 나타내지 않는 한 매개 변수 포인터를 역참조하지 마세요. 예를 들어 BLACKNESS와 같은 ROP에 대해 수행하면 액세스 위반이 발생할 수 있으므로 pbo-->iSolidColor 를 불필요하게 역참조하지 마세요. (이 규칙은 MIX 매개 변수를 포함하는 모든 함수에도 적용됩니다.)

드라이버가 rop4 매개 변수가 0XCCAA 설정된 이 함수에 대한 호출을 수신하는 경우 드라이버는 EngBitBlt에 대한 호출을 펀트하여 디바이스 표면을 호출에 적절하게 노출해야 합니다.

 
래스터 작업에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 winddi.h(Winddi.h 포함)

추가 정보

BRUSHOBJ

BRUSHOBJ_pvGetRbrush

CLIPOBJ

DrvSynchronize

EngAssociateSurface

EngBitBlt

EngCreateBitmap

EngCreateDeviceSurface

SURFOBJ

XLATEOBJ

XLATEOBJ_iXlate