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) |