![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Ситуация такая.
Во-первых, проблема проявляется не на всех компах - примерно на каждом втором вне зависимости от версии установленной Винды. Пытаюсь рисовать в контекст принтера. Линии, ружочки рисуются нормально, на печать выводятся. Но вот данные, получаемые из другого контекста с помощью функции StretchBlt не выводятся, функция возвращает 0. GetLastError() возвращает 87, в справочнике это соответствует "ERROR_INVALID_PARAMETER". Но если этой же функцией выводить из того же контекста не в контекст принтера, а в контекст окна, то все рисуется нормально. В чем может быть проблема и чего не хватает этой функции для нормальной жизни? Код приводил вот в этой ветке:http://forum.vingrad.ru/forum/topic-316414.html, но чувствуется что тут требуется мнение специалистов именно по WinAPI. Спасибо. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
586 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Причина может быть в драйверах к принтеру... Попробуй рисовать в контекст принтера по другому. |
||||
|
|||||
Emura |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
плюс к сказанному, не мешало бы удостовериться что нет утечек GDI ресурсов.
|
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Я не только на принтер пытался выводить - выводил и на всякие pdf-креаторы и прочии инструмнты для "виртуальной печати" - при печати в файл тот же косяк. В тестовом примере кроме GetDC никакие ресурсы не создаются... ReleaseDC делаю. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
искал утечки gdi, диспетчер задач их не показывает.
Проблемы с печатью тем не менее сохраняются. Уже не знаю, куда копать... -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Дело в чем-то другом. Удалось получить вот что.
На тех компах, где контекст принтера возвращается небольшим по разрешению, и увеличение растрового изображения при его выводе на принтер происходит примерно в 5-6 раз, все печатается нормально. А там, где разрешение принтера превосходит разрешение исходного контекста раз в 10-15, растровая операция уже ничего не выводит. Может, как-то можно ограничить размер того контекста, который возвращается для принтера? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
возможно, проблема аналогична этой: http://forum.vingrad.ru/forum/topic-242513...hblt/index.html
как, собственно и её решение, т.е. в данном случае, полагаю, вывод за пределы канвы принтера порождает ошибку "неверный параметр", т.е. возможно следует провести предварительное отсечение картинки перед выводом на принтер -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Почитал, спасибо. Дело скорее всего не в этом, так как выполнил следующий тест. 1. создал промежуточный контекст, совместимый с оконным, на который делаю StretchBlt 2. из этого контекста делаю BitBlt на принтер. Напрямую - не уговорить. 3. Сделал возможность ручного заданий коэффициентов умножения длины/ширины битмепа, на который делается StretchBlt. В итоге вот что получается. Если размеры выставлять так, чтобы печатать узкую и длинную полосу - то есть сильно растянутое либо по вертикале, либо по горизонтали изображение, то печатается нормально. Причем даже в том случае, если длина полосы превышает размер контекста принтера. Но вот когда пытаюсь увеличить ширину этой полосы, то это удается сделать до какого-то крайнего предела. Этот крайний предел инвариантен относительно какой-то абстрактной единицы площади - скажем, изображение растянутое в пропорциях 7х3, 8х2 печатается даже с выходом за пределы контекста, а вот растянутое в пропорциях 7х4, 8х3 уже не хочет - такое чувство, что то ли памяти не хватает, то ли других каких-то ресурсов. Посему вопрос - можно ли подправить контекст принтера так, чтобы разрешение у него было низкое и количество пикселов было сравнимо с экранным? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |