Método IPrintOemUni::HalftonePattern (prcomoem.h)

El método IPrintOemUni::HalftonePattern se puede usar con impresoras compatibles con Unidrv para crear o modificar un patrón de medio tono antes de usarse en una operación de mediotonamiento.

Sintaxis

HRESULT HalftonePattern(
  PDEVOBJ pdevobj,
  PBYTE   pHTPattern,
  DWORD   dwHTPatternX,
  DWORD   dwHTPatternY,
  DWORD   dwHTNumPatterns,
  DWORD   dwCallbackID,
  PBYTE   pResource,
  DWORD   dwResourceSize
);

Parámetros

pdevobj

Puntero proporcionado por el autor de la llamada a una estructura DEVOBJ .

pHTPattern

Puntero proporcionado por el autor de la llamada a un búfer que recibe el patrón de medio tono proporcionado por el método. El tamaño del búfer, en bytes, es:

(((dwHTPatternX * dwHTPatternY) + 3)/4) * 4 * dwHTNumPatterns

dwHTPatternX

Longitud proporcionada por el autor de la llamada, en píxeles, del patrón de medio tono, según lo especificado por el primer valor del atributo *HTPatternSize del archivo GPD.

dwHTPatternY

Alto proporcionado por el autor de la llamada, en píxeles, del patrón de medio tono, según lo especificado por el segundo valor del atributo *HTPatternSize del archivo GPD.

dwHTNumPatterns

Número de patrones proporcionados por el autor de la llamada, según lo especificado por el atributo *HTNumPatterns del archivo GPD. El número de patrones puede ser 1 o 3.

dwCallbackID

Valor proporcionado por el autor de la llamada que identifica el método halftone, tal y como especifica el atributo *HTCallbackID del archivo GPD.

pResource

Puntero proporcionado por el autor de la llamada a un búfer que contiene un patrón de medio tono, tal y como especifica el atributo *rcHTPatternID del archivo GPD. Puede ser NULL.

dwResourceSize

Tamaño proporcionado por el autor de la llamada del patrón de medio tono incluido en el búfer al que apunta pResource. Es cero si pResource es NULL.

Valor devuelto

El método debe devolver uno de los valores siguientes:

Código devuelto Descripción
S_OK La operación se realizó correctamente.
E_FAIL Error en la operación.
E_NOTIMPL El método no está implementado.

Comentarios

El método IPrintOemUni::HalftonePattern se usa para crear o modificar un patrón de medio tono antes de que Unidrv lo pase a GDI. Su propósito es permitir que los patrones de medio tono propietarios se almacenen como recursos cifrados o se generen en tiempo de ejecución.

Si se implementa el método IPrintOemUni::HalftonePattern y si la entrada de archivo GPD para el método halftoning seleccionado actualmente incluye un atributo *HTCallbackID , Unidrv llama al método IPrintOemUni::HalftonePattern antes de pasar un patrón de medio tono a GDI.

Si la entrada del archivo GPD para el método de halftoning seleccionado actualmente contiene una entrada *rcHTPatternID que identifica un recurso de RC_HTPATTERN, Unidrv obtiene el patrón y le pasa un puntero como valor del parámetro pResource . Esto permite almacenar el patrón como un recurso cifrado y usar el método IPrintOemUni::HalftonePattern para descodificar el patrón. El patrón descodificado debe devolverse en el búfer al que apunta pHTPattern.

También puede usar el método IPrintOemUni::HalftonePattern para generar un patrón de medio tono. En este caso no se necesita un recurso de RC_HTPATTERN, por lo que pResource es NULL. El método IPrintOemUni::HalftonePattern debe generar un patrón y devolverlo en el búfer al que apunta pHTPattern.

Si el método IPrintOemUni::HalftonePattern devuelve un patrón, se usa para todos los colores. Si el método devuelve tres patrones, deben especificarse en orden RGB.

En el ejemplo siguiente se muestra una implementación del método HalftonePattern de un complemento de representación. El método calcula la longitud en bytes de la matriz de patrones de HTPattern_DDK y, a continuación, copia los bytes de la matriz de patrones en el búfer al que apunta el parámetro pHTPattern de este método. La matriz de patrones puede contener uno o tres patrones, dependiendo de si el patrón se usa para todos los colores o tiene patrones rojos, verdes y azules independientes. Por motivos de brevedad, no se enumeran todos los elementos de la matriz de patrones.

static BYTE HTPattern_DDK[256] = {
    129,  44,  59, 124, 143, 232, 166, ...
    ...
    ...
    98, 202, 130, 148, 213,  101,  163, 72
};

HRESULT __stdcall IOemUni::HalftonePattern(
    PDEVOBJ     pdevobj,
    PBYTE       pHTPattern,
    DWORD       dwHTPatternX,
    DWORD       dwHTPatternY,
    DWORD       dwHTNumPatterns,
    DWORD       dwCallbackID,
    PBYTE       pResource,
    DWORD       dwResourceSize)
{
PBYTE  pSrcPattern;
DWORD  dwLen = sizeof(HTPattern_DDK);

if (dwLen != (((dwHTPatternX * dwHTPatternY) + 3) / 4) * 4 * dwHTNumPatterns)
    return E_FAIL;

pSrcPattern = HTPattern_DDK;

while (dwLen-- > 0)
    *pHTPattern++ = *pSrcPattern++;

return S_OK;
}

Una implementación de un método HalftonePattern en el complemento de representación debe ir acompañado de una característica Halftone en el archivo GPD. En el siguiente ejemplo de GPD se muestra una característica halftone cuya opción de HT_PAT_DDK_16x16 describe el patrón personalizado generado en el ejemplo anterior.


*Feature: Halftone

{

    *rcNameID: =HALFTONING_DISPLAY

    *HelpIndex: 12005

    *DefaultOption: HT_PATSIZE_AUTO

    *Option: HT_PATSIZE_AUTO

    {

        *rcNameID: =HT_AUTO_SELECT_DISPLAY

    }

    *Option: HT_PATSIZE_SUPERCELL_M

    {

        *rcNameID: =HT_SUPERCELL_DISPLAY

    }

    *Option: HT_PATSIZE_6x6_M

    {

        *rcNameID: =HT_DITHER6X6_DISPLAY

    }

    *Option: HT_PATSIZE_8x8_M

    {

        *rcNameID: =HT_DITHER8X8_DISPLAY

    }

    *Option: HT_PAT_DDK_16x16

    {

        *Name: "DDK 16x16"

        *HTPatternSize: PAIR(16, 16)

        *HTNumPatterns: 1

        *HTCallbackID: 1

    }

}

El método IPrintOemUni::HalftonePattern es opcional. Si un complemento de representación implementa este método, el método IPrintOemUni::GetImplementedMethod del complemento debe devolver S_OK cuando recibe "HalftonePattern" como entrada.

Para obtener más información sobre el mediotonamiento, vea Atributos de opción y halftoning personalizadospara la característica halftone.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado prcomoem.h (incluya Prcomoem.h)

Consulte también

IPrintOemUni (interfaz)

IPrintOemUni::ImageProcessing