Преобразование растрового принтера для обработки TrueColor, 8bpp не только монохромный - PullRequest
0 голосов
/ 22 апреля 2020

Давайте посмотрим, сможет ли кто-нибудь указать мне правильное направление и прокомментировать задачу, над которой я работаю.

У меня есть драйвер растрового изображения, который в настоящее время не поддерживает какой-либо вид печати, кроме моно chrome. Вот так теперь выглядят расширенные настройки. По умолчанию драйвер имеет значение моно chrome и не предоставляет пользователю никакого выбора. Все эти годы было хорошо, но теперь пользователи жалуются, что печать не ясна. Мне нужно это исправить, и я не собираюсь менять рабочий процесс пользователей, поэтому поиск другой системы печати - наименее предпочтительная альтернатива. Было бы здорово, если бы я мог включить эти настройки.

enter image description here

Образец растрового изображения был первоначально взят отсюда. Образец поддерживает все тона печати. https://github.com/microsoft/Windows-driver-samples/tree/master/print/OEM%20Printer%20Customization%20Plug-in%20Samples/C%2B%2B/bitmap

enter image description here

В файле GPD принтера я добавил все эти 4 варианта цвета точно так же, как в файле пример проекта. Это помогло мне в некоторой степени, означая, что мой принтер теперь показывает все опции. Но в коде что-то не так, я думаю, EnableDriver не вызывается. Я предполагаю, что может быть больше мест, где это изменение должно произойти. EnableDriver - это основные указатели функций экспорта из драйвера сеанса на основе GDI или драйвера принтера, который информирует GDI о базовом устройстве и размере его возможностей и т. Д. c. В дополнение к файлу GPD, где еще нужно изменить эти настройки? Любые указатели на этом пути кролика были бы полезны. Я видел это в исключении Windbg C ++ EH - код e06d7363 (первый шанс), но я понятия не имею, как даже обработать исключение. Я из мира. NET, если я не могу поставить точку останова, я не могу это исправить. Код не нарушается во внутреннем интерфейсе. cpp Возможно, потому что некоторые символы отсутствуют. Это напрямую идет в ddihook. cpp. Это текущий файл GPD, который включает все 4 режима печати. ​​

*%******************************************************************************************
*%                                      Color Mode
*%******************************************************************************************
*Feature: ColorMode
{
    *rcNameID: =COLOR_PRINTING_MODE_DISPLAY
    *DefaultOption: Mono
    *Option: Mono
    {
        *rcNameID: =MONO_DISPLAY
        *DevNumOfPlanes: 0
        *DevBPP: 0
        *IPCallbackID: 1
        *Color?: FALSE
    }
    *Option: Color
    {
        *rcNameID: =COLOR_DISPLAY
        *DevNumOfPlanes: 0
        *DevBPP: 0
        *DrvBPP: 4
        *IPCallbackID: 2
        *PaletteSize: 8
        *PaletteProgrammable?: TRUE
        *Command: CmdEnableDRC { *Cmd: "" }
        *Command: CmdDefinePaletteEntry { *Cmd : "" }
        *Command: CmdSelectPaletteEntry { *Cmd : "" }
        *Command: CmdSetSrcBmpWidth { *Cmd : "" }
        *Command: CmdSelect
        {
            *Order: PAGE_SETUP.16
            *Cmd: ""
        }
    }
    *Option: 8bpp
    {
        *rcNameID: =8BPP_DISPLAY
        *DevNumOfPlanes: 0
        *DevBPP: 0
        *DrvBPP: 8
        *IPCallbackID: 3
        *PaletteSize: 256
        *PaletteProgrammable? : TRUE
        *Command: CmdEnableDRC { *Cmd : "" }
        *Command: CmdDefinePaletteEntry { *Cmd : "" }
        *Command: CmdSelectPaletteEntry { *Cmd : "" }
        *Command: CmdSetSrcBmpWidth { *Cmd : "" }
        *Command: CmdSelect
        {
            *Order: PAGE_SETUP.16
            *Cmd: ""
        }
    }
    *Option: 24bpp
    {
        *rcNameID: =24BPP_DISPLAY
        *DevNumOfPlanes: 0
        *DevBPP: 0
        *DrvBPP: 24
        *IPCallbackID: 5
        *PaletteSize: 256
        *PaletteProgrammable? : TRUE
        *Command: CmdEnableDRC { *Cmd : "" }
        *Command: CmdDefinePaletteEntry { *Cmd : "" }
        *Command: CmdSelectPaletteEntry { *Cmd : "" }
        *Command: CmdSetSrcBmpWidth { *Cmd : "" }
        *Command: CmdSelect
        {
            *Order: PAGE_SETUP.16
            *Cmd: ""
        }
    }
}
...