DrvStretchBltROP 함수(winddi.h)
DrvStretchBltROP 함수는 ROP를 사용하여 스트레치 비트 블록 전송을 수행합니다.
구문
BOOL DrvStretchBltROP(
[in, out] SURFOBJ *psoDest,
[in, out] SURFOBJ *psoSrc,
[in, optional] SURFOBJ *psoMask,
[in] CLIPOBJ *pco,
[in, optional] XLATEOBJ *pxlo,
[in, optional] COLORADJUSTMENT *pca,
[in] POINTL *pptlHTOrg,
[in] RECTL *prclDest,
[in] RECTL *prclSrc,
[in, optional] POINTL *pptlMask,
[in] ULONG iMode,
[in] BRUSHOBJ *pbo,
[in] DWORD rop4
);
매개 변수
[in, out] psoDest
그릴 표면을 설명하는 SURFOBJ 구조체에 대한 포인터입니다.
[in, out] psoSrc
비트 블록 전송의 원본 표면을 설명하는 SURFOBJ 구조체에 대한 포인터입니다.
[in, optional] psoMask
원본에 대한 마스크를 정의하는 SURFOBJ 구조체에 대한 포인터입니다. 마스크는 픽셀당 1비트인 비트맵인 논리 맵에 의해 정의됩니다. 일반적으로 마스크는 대상 표면에서 수정할 영역을 제한합니다. 이 마스크는 항상 원본 표면과 같은 크기입니다.
[in] pco
대상에서 수정할 영역을 제한하는 CLIPOBJ 구조체에 대한 포인터입니다. CLIPOBJ_Xxx 서비스 루틴은 클립 영역을 사각형 집합으로 열거하기 위해 제공됩니다.
가능하면 GDI는 관련된 클리핑을 간소화합니다. 그러나 DrvBitBlt과 달리 DrvStretchBltROP 은 단일 클리핑 사각형으로 호출할 수 있습니다. 이렇게 하면 출력을 클리핑할 때 반올림 오류가 발생하지 않습니다.
[in, optional] pxlo
원본 표면과 대상 표면 간에 색 인덱스를 변환하는 방법을 지정하는 XLATEOBJ 구조체에 대한 포인터입니다. pxlo가 NULL이면 번역이 필요하지 않습니다.
이 XLATEOBJ 구조체를 쿼리하여 모든 원본 인덱스용 RGB 색을 찾을 수도 있습니다. 고품질 스트레칭 비트 블록 전송은 경우에 따라 색을 보간해야 합니다.
[in, optional] pca
비트를 확장하기 전에 원본 비트맵에 적용할 색 조정 값을 정의하는 COLORADJUSTMENT 구조체에 대한 포인터입니다. 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.
[in] pptlHTOrg
대상 표면에서 하프톤 브러시의 원점을 정의하는 POINTL 구조체에 대한 포인터입니다. 하프톤 브러시를 사용하는 경우 드라이버는 브러시의 왼쪽 위 픽셀을 이 점에 맞춰 정렬하고 해당 크기에 따라 브러시를 반복해야 합니다. rop4 매개 변수에 패턴이 필요하지 않은 경우 드라이버는 이 매개 변수를 무시해야 합니다.
[in] prclDest
수정할 사각형 영역을 정의하는 RECTL 구조체에 대한 포인터입니다. 이 사각형은 대상 표면의 좌표계에 지정되며 왼쪽 위와 오른쪽 아래의 두 점으로 정의됩니다. 사각형을 정의하는 두 점의 순서가 항상 잘 정렬되지는 않습니다. 즉, 두 번째 점의 좌표가 반드시 첫 번째 점의 좌표보다 크지는 않습니다. 대상 사각형이 잘 정렬되지 않은 경우 드라이버는 두 x 값 및/또는 두 y 값을 교환해야 합니다.
사각형은 오른쪽 아래에 배타적입니다. 즉, 아래쪽 및 오른쪽 가장자리가 복사본의 일부가 아닙니다.
DrvStretchBltROP 은 빈 대상 사각형으로 호출되지 않습니다.
[in] prclSrc
복사할 영역을 정의하는 RECTL 구조체에 대한 포인터입니다. 이 사각형은 원본 표면의 좌표계에 지정되며 왼쪽 위와 오른쪽 아래의 두 점으로 정의됩니다. 사각형을 정의하는 두 지점은 항상 순서가 잘 정렬됩니다.
사각형은 오른쪽 아래에 배타적입니다. 즉, 아래쪽 및 오른쪽 가장자리는 복사본의 일부가 아닙니다.
드라이버는 prclDest로 정의된 사각형에 이 사각형을 매핑해야 합니다.
[in, optional] pptlMask
prclMask가 가리키는 마스크의 픽셀을 정의하는 POINTL 구조체에 대한 포인터입니다. 이 픽셀은 prclSrc 가 가리키는 원본 사각형의 왼쪽 위 픽셀에 해당합니다. 마스크가 지정되지 않은 경우 드라이버는 이 매개 변수를 무시해야 합니다.
[in] iMode
원본 픽셀을 결합하여 출력 픽셀을 가져오는 방법을 지정합니다. HALFTONE 모드는 다른 모드보다 느리지만 더 높은 품질의 이미지를 생성합니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
BLACKONWHITE | 축소 비트 블록 전송에서 픽셀은 부울 AND 연산과 결합되어야 합니다. 늘이는 비트 블록 전송에서 픽셀을 복제해야 합니다. |
COLORONCOLOR | 축소 비트 블록 전송에서는 픽셀을 결합할 필요가 없도록 충분한 픽셀을 무시해야 합니다. 늘이는 비트 블록 전송에서 픽셀을 복제해야 합니다. |
하프톤 | 드라이버는 출력 표면의 픽셀 그룹을 사용하여 입력의 색 또는 회색 수준을 가장 근사화할 수 있습니다. |
WHITEONBLACK | 축소 비트 블록 전송에서 픽셀은 부울 OR 연산과 결합되어야 합니다. 늘이는 비트 블록 전송에서 픽셀을 복제해야 합니다. |
[in] pbo
비트 블록 전송 패턴을 정의하는 데 사용할 BRUSHOBJ 구조체에 대한 포인터입니다. GDI의 BRUSHOBJ_pvGetRbrush 서비스 루틴은 디바이스의 브러시 실현을 검색합니다. rop4 매개 변수에 패턴이 필요하지 않은 경우 드라이버는 이 매개 변수를 무시할 수 있습니다.
[in] rop4
마스크, 패턴, 원본 및 대상 픽셀을 결합하여 대상 화면에 출력 픽셀을 쓰는 방법을 정의하는 래스터 작업을 나타냅니다.
이것은 일반적인 삼중 Rop3 연산의 자연스러운 확장인 쿼터너리 래스터 작업입니다. Rop4에는 Rop3의 8개 정의 비트와 유사한 16개의 관련 비트가 있습니다. (Rop3의 다른 중복 비트는 무시됩니다.) Rop4를 구현하는 가장 간단한 방법은 2바이트를 별도로 고려하는 것입니다. 더 낮은 바이트는 psoMask 가 가리키는 마스크가 1인 곳마다 계산해야 하는 Rop3을 지정합니다. 높은 바이트는 마스크가 0일 때마다 계산 및 적용할 수 있는 Rop3을 지정합니다.
반환 값
DrvStretchBltROP 은 성공하면 TRUE 를 반환해야 합니다. 그렇지 않으면 오류 코드를 보고하고 FALSE를 반환해야 합니다.
설명
매핑은 prclSrc 및 prclDest로 정의됩니다. prclDest 및 prclSrc에 지정된 점은 픽셀 중앙에 해당하는 정수 좌표에 있습니다. 이러한 두 점으로 정의된 사각형은 좌표가 지정된 점이지만 각 좌표에서 0.5를 빼는 두 개의 꼭짓점이 있는 기하학적 사각형으로 간주됩니다. POINTL 구조는 이러한 소수 좌표 꼭짓점을 지정하기 위한 약식 표기법입니다.
드라이버는 필요에 따라 DrvStretchBltROP을 구현할 수 있습니다. 드라이버가 이 호출을 후크하는 경우 EngStretchBltROP 을 호출하여 지원하지 않는 스트레치 블릿 작업을 수행할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 데스크톱 |
머리글 | winddi.h(Winddi.h 포함) |