Member 14605311 Ответов: 1

Быстрая печать растрового изображения на принтер (который может делать bitblt) из win GDI C/C++


Я хотел бы полностью контролировать современный цветной лазерный принтер (который поддерживает BitBlt) -
чтобы иметь возможность печатать в любой точке=точка (скажем, 600DPI) любой из только 8 действительно доступных цветов:
Голубой пурпурный желтый черный C+M=синий C+Y=зеленый M+Y=Красный (8 - й-Белый),

обход блоков преобразования цвета и сглаживания как Windows, так и драйвера принтера?

Был бы очень благодарен за какой-нибудь рабочий пример кода

Что я уже пробовал:

DDB только с этими 8 цветами & BitBlt

Stefan_Lang

IMHO как операционные системы, так и функциональность принтера стали настолько сложными за последние десятилетия, что больше невозможно написать надежный драйвер принтера самостоятельно, даже если вы являетесь экспертом в этой области - гораздо меньше, если вам нужно попросить код.

AFAIK, драйверы принтеров действительно предлагают возможность управлять практически всем уже через API принтера, предоставляемый производителем принтера. Однако он может быть скрыт драйвером, который Windows автоматически устанавливает.

Реальная проблема заключается в том, чтобы написать драйвер - любой драйвер - который не будет автоматически переопределен следующим принудительным обновлением Windows. Или быть выгнанным за то, что он потенциально опасен в соответствии с программой обновления Windows.

Тем не менее, если ваш принтер понимает Postscript, возможно, это даст вам всю необходимую функциональность.

Member 14605311

Спасибо. Я подозревал именно это, но все же надеялся на чудо.
Попробую Постскриптум. Хоу, я бы отправил блок PS на принтер из моей программы на языке Си? Вы можете помочь мне с этим кодом?

Richard MacCutchan

Возможно, вам следует поговорить с производителем принтера, чтобы узнать, есть ли у них комплект SDK, который поможет вам. AFAIK единственный способ управлять принтером напрямую-это каким-то образом подключить его без использования PNP.

Member 14605311

Спасибо. Да, я подозревал именно это, но все же надеялся на чудо.
Попробую Постскриптум. Как бы я отправил блок S PS на принтер из своей программы на языке Си? Вы можете помочь мне с этим кодом?

Richard MacCutchan

Я никогда не пробовал его, но взгляните на него. https://support.microsoft.com/en-us/help/138594/howto-send-raw-data-to-a-printer-by-using-the-win32-api[^].

Member 14605311

Большое спасибо. Это определенно решает половину проблемы: обход ОС.

1 Ответов

Рейтинг:
1

steveb

Принтер был абстрагирован в контекст устройства десятилетия назад. Таким образом, вы пишете/рисуете на принтере точно так же, как и на экране. Вы просто использовать 'HDC принтера" вместо "отображение HDC'. Все прямоугольники и координаты будут совпадать с координатами принтера HDC.

Просто посмотрите, как получить принтер DC и его хорошее стартовое место