IPrintOemUni::FilterGraphics 메서드(prcomoem.h)

IPrintOemUni::FilterGraphics 메서드를 Unidrv 지원 프린터와 함께 사용하여 스캔 라인 데이터를 수정하고 스풀러로 보낼 수 있습니다.

구문

HRESULT FilterGraphics(
  PDEVOBJ pdevobj,
  PBYTE   pBuf,
  DWORD   dwLen
);

매개 변수

pdevobj

DEVOBJ 구조체에 대한 호출자 제공 포인터입니다.

pBuf

인쇄할 스캔 라인 데이터가 포함된 버퍼에 대한 호출자 제공 포인터입니다.

dwLen

pBuf에서 가리키는 데이터의 길이(바이트)를 나타내는 호출자 제공 값입니다.

반환 값

메서드는 다음 값 중 하나를 반환해야 합니다.

반환 코드 Description
S_OK 작업에 성공했습니다.
E_FAIL 작업이 실패했습니다.
E_NOTIMPL 메서드가 구현되지 않았습니다.

설명

IPrintOemUni::FilterGraphics 메서드는 인쇄 스풀러로 전송되기 전에 스캔 라인 데이터를 수정하는 데 사용됩니다. 메서드는 수신하는 데이터를 스풀러로 전송해야 합니다.

IPrintOemUni::FilterGraphics 메서드는 선택 사항입니다. 렌더링 플러그 인이 이 메서드를 구현하는 경우 플러그 인의 IPrintOemUni::GetImplementedMethod 메서드는 "FilterGraphics"를 입력으로 수신할 때 S_OK 반환해야 합니다.

IPrintOemUni::FilterGraphics 메서드가 구현된 경우 Unidrv는 프린터 데이터를 스풀하지 않습니다. 대신, Unidrv는 이미지 데이터의 버퍼를 스풀링할 준비가 될 때마다 이 메서드를 호출합니다.

이 메서드가 구현될 때 Unidrv는 일반적으로와 같이 프린터 데이터도 압축하지 않습니다. Unidrv 압축을 사용하려는 경우 이 메서드를 구현하면 안 됩니다. 또한 "FilterGraphics" 문자열을 전달할 때 S_FALSE 반환되도록 IPrintOemUni::GetImplementedMethod 를 수정해야 합니다.

메서드는 인접한 점 제거 또는 Unidrv가 제공하지 않는 다른 데이터 스트림 필터링 작업과 같은 이미지 데이터의 최종 후처리를 수행할 수 있습니다. 그런 다음 IPrintOemDriverUni::D rvWriteSpoolBuf 메서드를 호출하여 데이터를 스풀링해야 합니다.

IPrintOemUni::FilterGraphics 메서드는 Unidrv의 DrvSendPage 함수에 의해 호출됩니다. IPrintOemUni::FilterGraphics를 구현하려는 경우 Unidrv의 DrvSendPage 또는 DrvNextBand 함수를 완전히 재정의해서는 안 됩니다.

Unidrv의 DrvSendPage 함수가 플러그 인의 IPrintOemUni::FilterGraphics 구현인 DrvSendPage를 호출하기 전에

  1. 필요한 경우 렌더링할 비트맵을 변환합니다.

  2. 색 데이터로 구성된 출력 패스를 단일 연속 데이터 배열로 변환합니다.

  3. 스캔 라인 그룹을 처리하고 이 데이터를 프린터의 명령으로 변환합니다.

  4. X/Y 위치를 설정하고 그래픽 데이터 줄을 프린터에 전달합니다.

플러그 인이 IPrintOemUni::FilterGraphics 를 구현한 경우 Unidrv는 프린터로 보내는 대신 스캔 라인 데이터로 플러그 인을 호출합니다.

IPrintOemUni::FilterGraphics 메서드를 사용하면 렌더링 플러그 인이 스캔 라인 데이터를 수정하고 스풀러로 보낼 수 있습니다. 이 함수를 구현하는 경우 Unidrv는 데이터를 스풀하지 않습니다. 대신 데이터 버퍼를 스풀링하고 프린터로 보낼 준비가 될 때마다 IPrintOemUni::FilterGraphics 가 호출됩니다.

IPrintOemUni::FilterGraphics를 사용하여 특수 압축 방법을 구현하거나 프린터 또는 둘 다로 전송되는 데이터 스트림에서 비트 조작을 수행할 수 있습니다. 어떤 상황에서도 드라이버의 기본 제공 압축 코드는 사용되지 않습니다. IPrintOemUni::FilterGraphics 는 데이터 블록과 함께 제공되며 DrvWriteSpoolBuf 함수를 사용하여 이 데이터를 출력하는 데 필요합니다. 핵심 드라이버(Unidrv)는 OEMFilterGraphics를 호출한 후 래스터 데이터를 더 이상 처리하지 않습니다.

플러그 인에서 IPrintOemUni::FilterGraphics 메서드를 구현하면 래스터 데이터를 프린터로 직접 보내는 데 사용됩니다. 블록의 스캔 줄 수는 해결 기능과 연결된 PinsPerPhysPass 특성을 통해 지정됩니다. 이 특성은 선택 사항이며, 지정하지 않으면 1로 설정됩니다(예: 대부분의 잉크젯 및 페이지 프린터의 경우). 그렇지 않으면 PinsPerPhysPass는 8의 배수여야 합니다. IPrintOemUni::FilterGraphics에서 pBuf 매개 변수는 필요한 경우 조작할 검사 라인 래스터 데이터가 포함된 버퍼를 가리키고(예: 압축) 마지막으로 보냅니다. dwLen 매개 변수는 pBuf가 가리키는 버퍼의 길이입니다.

다음 목록에서는 IPrintOemUni::FilterGraphics를 구현하기 위한 몇 가지 일반적인 시나리오를 설명합니다.

  • 특수 압축 기술

  • 프린터로 보내기 전에 들어오는 래스터 데이터의 비트 조작

IPrintOemUni::FilterGraphicsDrvWriteSpoolBuf 함수를 사용하여 모든 데이터를 프린터로 보냅니다. 핵심 드라이버(Unidrv)는 IPrintOemUni::FilterGraphics 에서 보내는 데이터에 대해 더 이상 처리를 수행하지 않습니다. 플러그 인이 특수 압축 또는 비트 조작을 수행하는 경우 플러그 인은 특수 압축 또는 비트 조작에 필요한 버퍼를 할당해야 합니다. 플러그 인이 자체 버퍼를 할당하지 않고 압축된 데이터가 원본보다 작은 경우 출력은 원본 버퍼를 덮어씁니다.

IPrintOemUni::FilterGraphics 메서드를 사용하면 스캔 라인 데이터 자체에 액세스할 수 있으며 래스터 데이터를 사후 처리할 수 있습니다.

스캔 줄의 수는 이미지의 높이와 같습니다. 예를 들어 각 스캔 선의 픽셀당 1비트(bpp) 두께는 1픽셀의 너비와 같으므로 스캔 선의 수는 이미지의 높이와 같습니다.

Unidrv의 렌더링 작업을 사용자 지정하는 방법에 대한 자세한 내용은 Unidrv 특정 사용자 지정 렌더링을 참조하세요.

요구 사항

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

추가 정보

DrvNextBand

DrvSendPage

DrvWriteSpoolBuf

IPrintOemDriverUni::D rvWriteSpoolBuf

IPrintOemUni

IPrintOemUni::GetImplementedMethod

OEMFilterGraphics