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


Метод 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

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

dwHTPatternY

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

dwHTNumPatterns

Вызываемое число шаблонов, указанное атрибутомHTNumPatterns файла GPD. Число шаблонов может быть либо 1, либо 3.

dwCallbackID

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

pResource

Вызывающий указатель на буфер, содержащий полутонный шаблон, как указано в атрибуте GPD файла *rcHTPatternID. Это может быть 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.

В следующем примере показана реализация метода модуля отрисовки. Метод вычисляет длину в байтах массива шаблонов 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" в качестве входных данных.

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка prcomoem.h (include Prcomoem.h)

См. также

интерфейса IPrintOemUni

IPrintOemUni::ImageProcessing