![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| dadrum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Здравствуйте, подскажите почему в контекст принтера не получается вывести изображение (причем на форму выводится), хотя текст и графические примитивы печатаются отлично.
пытаюсь вывести изображение так:
hdc- контекст принтера a->Bitmap - предварительно загруженный битмап |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
dadrum, а bitblt работает?
Добавлено через 2 минуты и 45 секунд В справке написано так
Добавлено через 6 минут и 38 секунд Хотя про BitBlt тоже так написано
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| dadrum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
не работает |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
dadrum, проверьте возможности принтера функцией GetDeviceCaps , с параметром RASTERCAPS на RC_BITBLT и RC_STRETCHBLT. Если нет, то ничего не поделаешь.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| dadrum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
проверил, поддерживаются |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
у принтера просто более крупная метрика, посмотри внимательно, возможно твой битмап, если он достаточно темный и крупный, выходит на бумаге в виде точки или оч. маленького прямоугольника
используй для преобразований координат DPtoLP и LPtoDP, либо вручную, как в примере: http://msdn.microsoft.com/en-us/library/dd162865(VS.85).aspx там тоже используется растяжка, но уже с сохранением пропорций -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| dadrum |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
Дело в том, что и с метрикой вроде всё ок и с принтером...
Устанавливается метрика 0,01 мм
и в коде
posleft+px1 = 0 postop+py1 = 0 w = 3492 = 34 мм h = 4656 = 46 мм a->BitmapW = 450 pix a->BitmapH = 600 pix и Rectangle по этим координаиам - на бумаге печатается ... блин, головоломка! |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ну, тогда можно попробовать сменить совместимый девайс для битмапа
за шаблон взять не принтер, а десктоп ну и вообще, посмотреть, что собственно возвращает сама StretchBlt, и если не TRUE, то GetLastError ("ERR,hr" - в watch'е) Добавлено через 3 минуты и 59 секунд я бы не советовал так делать только потому, что метрику задает драйвер принтера, который, как известно, можно всегда сменить, как и сам принтер, естессно (а пример из MSDN работать будет одинаково всегда) Добавлено через 7 минут и 20 секунд кстати, заметил разницу, откуда уже появилось три девайса? или третий - это вариации на тему hdcMem? -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| dadrum |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
В приведенном ранее коде, StretchBlt возвращает true.
А если сделать
StretchBlt возвращает ошибку "неверно задан параметр" (в обоих вариантах битмап на форму выводится а на принтер нет)
pPDX->hDC - используется в форме выбора принтера, этот же указатель передается в функцию отрисовки, т.е. в изначальном примере hdc - это pPDX->hDC может надо что-то менять в настройках битмапа? |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
контекст десктопа можно получить с помощью вызова GetDC(NULL), а просто NULL - не есть контекст -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| dadrum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
та же ошибка ... |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
кстати парный ReleaseDC(0,hdcScreen) к нему тоже нужен
если и это не поможет, то возможно принтер просто настроен на "черновую" печать, тогда он в принципе может пропускать битмапы (эту галочку надо снять в настройках принтера) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| dadrum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2007 Репутация: нет Всего: нет |
я уже запарил наверна =)
не помогает, какое бы качество печать ни поставил - чистый лист
это само собой может нужно копать в формате HBITMAP ? Это сообщение отредактировал(а) dadrum - 27.3.2009, 16:30 |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
я бы к битмапу в последнюю очередь придирался надо попробовать чо-нить напечатать, один момент -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
немного подкорректировал пример из MSDN,
на бумагу картинка выходит:
с размерами тут проблем нет: рисунок выводится в оригинальном масштабе по центру правда у меня, по крайней мере, рисунок выводится мнохромный (не grayscale, как ожидал на Canon LBP-810) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |