Поделиться через


Метод IPrintOemUni::HalftonePattern (prcomoem.h)

Метод IPrintOemUni::HalftonePattern можно использовать с принтерами, поддерживаемыми Unidrv, для создания или изменения шаблона полутона перед его использованием в операции полутона.

Синтаксис

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

Параметры

pdevobj

Предоставленный вызывающим объектом указатель на структуру DEVOBJ .

pHTPattern

Предоставленный вызывающим объектом указатель на буфер, который получает предоставленный методом шаблон полутона. Размер буфера в байтах:

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

dwHTPatternX

Указанная вызывающим объектом длина (в пикселях) шаблона полутонов, как указано в первом значении в атрибуте *HTPatternSize файла GPD.

dwHTPatternY

Указанная вызывающим объектом высота (в пикселях) шаблона полутонов, как указано вторым значением в атрибуте *HTPatternSize файла GPD.

dwHTNumPatterns

Количество шаблонов, предоставленных вызывающим объектом, как указано в атрибуте *HTNumPatterns файла GPD. Количество шаблонов может быть 1 или 3.

dwCallbackID

Предоставленное вызывающим объектом значение, определяющее метод полутонов, как указано в атрибуте *HTCallbackID файла GPD.

pResource

Предоставленный вызывающим объектом указатель на буфер, содержащий шаблон полутона, как указано в атрибуте *rcHTPatternID файла GPD. Может иметь значение NULL.

dwResourceSize

Предоставленный вызывающим объектом размер шаблона полутона, содержащегося в буфере, на который указывает pResource. Значение равно нулю, если pResource имеет значение NULL.

Возвращаемое значение

Метод должен возвращать одно из следующих значений:

Код возврата Описание
S_OK Операция успешно выполнена.
E_FAIL Операция не удалась.
E_NOTIMPL Метод не реализован.

Комментарии

Метод IPrintOemUni::HalftonePattern используется для создания или изменения шаблона полутона перед тем, как Unidrv передаст его в GDI. Его цель — разрешить хранить собственные шаблоны полутона в виде зашифрованных ресурсов или создавать во время выполнения.

Если реализован метод IPrintOemUni::HalftonePattern и если запись файла GPD для выбранного метода полутонирования включает атрибут *HTCallbackID , Unidrv вызывает метод IPrintOemUni::HalftonePattern перед передачей шаблона полутона в GDI.

Если запись файла GPD для выбранного метода полутонирования содержит запись *rcHTPatternID, идентифицируя RC_HTPATTERN ресурс, Unidrv получает шаблон и передает на него указатель в качестве значения параметра pResource . Это позволяет хранить шаблон как зашифрованный ресурс и использовать метод IPrintOemUni::HalftonePattern для декодирования шаблона. Декодированные шаблоны должны возвращаться в буфере, на который указывает pHTPattern.

Для создания шаблона полутона можно также использовать метод IPrintOemUni::HalftonePattern . В этом случае ресурс RC_HTPATTERN не требуется, поэтому pResource имеет значение NULL. Метод IPrintOemUni::HalftonePattern должен создать шаблон и вернуть его в буфер, на который указывает pHTPattern.

Если метод IPrintOemUni::HalftonePattern возвращает один шаблон, он используется для всех цветов. Если метод возвращает три шаблона, они должны быть указаны в порядке RGB.

В следующем примере показана реализация метода HalftonePattern подключаемого модуля отрисовки. Метод вычисляет длину массива шаблонов HTPattern_DDK в байтах, а затем копирует байты из массива шаблонов в буфер, на который указывает параметр pHTPattern этого метода. Массив шаблонов может содержать один или три узора в зависимости от того, используется ли узор для всех цветов или имеет отдельные красные, зеленые и синие узоры. Для краткости перечисляются не все элементы массива шаблонов.

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;
}

Реализация метода HalftonePattern в подключаемом модуле отрисовки должна сопровождаться функцией Halftone в файле GPD. В следующем примере GPD показан компонент Halftone, параметр HT_PAT_DDK_16x16 которого описывает настраиваемый шаблон, созданный в предыдущем примере.


*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

    }

}

Метод IPrintOemUni::HalftonePattern является необязательным. Если подключаемый модуль отрисовки реализует этот метод, метод IPrintOemUni::GetImplementedMethod должен возвращать S_OK при получении "HalftonePattern" в качестве входных данных.

Дополнительные сведения о полутонах см. в разделе Настраиваемые атрибуты полутонов и параметров для функции полутона.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть prcomoem.h (включая Prcomoem.h)

См. также раздел

Интерфейс IPrintOemUni

IPrintOemUni::ImageProcessing