Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StretchBlt возвращает FALSE, GetLastError возвращает 87 
:(
    Опции темы
Dreamer_0x01
Дата 2.12.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Ситуация такая.

Во-первых, проблема проявляется не на всех компах - примерно на каждом втором вне зависимости от версии установленной Винды.

Пытаюсь рисовать в контекст принтера.
Линии, ружочки рисуются нормально, на печать выводятся.
Но вот данные, получаемые из другого контекста с помощью функции StretchBlt не выводятся, функция возвращает 0.
GetLastError() возвращает 87, в справочнике это соответствует "ERROR_INVALID_PARAMETER".

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

В чем может быть проблема и чего не хватает этой функции для нормальной жизни?

Код приводил вот в этой ветке:http://forum.vingrad.ru/forum/topic-316414.html, но чувствуется что тут требуется мнение специалистов именно по WinAPI.

Спасибо.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
586
Дата 2.12.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Dreamer_0x01 @  2.12.2010,  19:31 Найти цитируемый пост)
Во-первых, проблема проявляется не на всех компах - примерно на каждом втором вне зависимости от версии установленной Винды.

Цитата(Dreamer_0x01 @  2.12.2010,  19:31 Найти цитируемый пост)
Но если этой же функцией выводить из того же контекста не в контекст принтера, а в контекст окна, то все рисуется нормально.

Причина может быть в драйверах к принтеру... Попробуй рисовать в контекст принтера по другому.
PM   Вверх
Emura
Дата 3.12.2010, 01:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 7.2.2009

Репутация: 1
Всего: 1



плюс к сказанному, не мешало бы удостовериться что нет утечек GDI ресурсов.
PM   Вверх
Dreamer_0x01
Дата 3.12.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Цитата(586 @  2.12.2010,  20:36 Найти цитируемый пост)
Причина может быть в драйверах к принтеру... 


Я не только на принтер пытался выводить - выводил и на всякие pdf-креаторы и прочии инструмнты для "виртуальной печати" - при печати в файл тот же косяк.

Цитата(Emura @  3.12.2010,  01:06 Найти цитируемый пост)
не мешало бы удостовериться что нет утечек GDI ресурсов.


В тестовом примере кроме GetDC никакие ресурсы не создаются...
ReleaseDC делаю.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Dreamer_0x01
Дата 26.12.2010, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



искал утечки gdi, диспетчер задач их не показывает.
Проблемы с печатью тем не менее сохраняются. Уже не знаю, куда копать...


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Dreamer_0x01
Дата 19.1.2011, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Дело в чем-то другом. Удалось получить вот что.

На тех компах, где контекст принтера возвращается небольшим по разрешению, и увеличение растрового изображения при его выводе на принтер происходит примерно в 5-6 раз, все печатается нормально.
А там, где разрешение принтера превосходит разрешение исходного контекста раз в 10-15, растровая операция уже ничего не выводит.

Может, как-то можно ограничить размер того контекста, который возвращается для принтера?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
GremlinProg
Дата 19.1.2011, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



возможно, проблема аналогична этой: http://forum.vingrad.ru/forum/topic-242513...hblt/index.html
как, собственно и её решение,

т.е. в данном случае, полагаю, вывод за пределы канвы принтера порождает ошибку "неверный параметр",
т.е. возможно следует провести предварительное отсечение картинки перед выводом на принтер


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Dreamer_0x01
Дата 20.1.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 12



Цитата(GremlinProg @  19.1.2011,  23:41 Найти цитируемый пост)
т.е. в данном случае, полагаю, вывод за пределы канвы принтера порождает ошибку "неверный параметр"

Почитал, спасибо.

Дело скорее всего не в этом, так как выполнил следующий тест.
1. создал промежуточный контекст, совместимый с оконным, на который делаю StretchBlt
2. из этого контекста делаю BitBlt на принтер. Напрямую - не уговорить.
3. Сделал возможность ручного заданий коэффициентов умножения длины/ширины битмепа, на который делается StretchBlt.

В итоге вот что получается. Если размеры выставлять так, чтобы печатать узкую и длинную полосу - то есть сильно растянутое либо по вертикале, либо по горизонтали изображение, то печатается нормально. Причем даже в том случае, если длина полосы превышает размер контекста принтера.
Но вот когда пытаюсь увеличить ширину этой полосы, то это удается сделать до какого-то крайнего предела. Этот крайний предел инвариантен относительно какой-то абстрактной единицы площади - скажем, изображение растянутое в пропорциях 7х3, 8х2 печатается даже с выходом за пределы контекста, а вот растянутое в пропорциях 7х4, 8х3 уже не хочет - такое чувство, что то ли памяти не хватает, то ли других каких-то ресурсов.

Посему вопрос - можно ли подправить контекст принтера так, чтобы разрешение у него было низкое и количество пикселов было сравнимо с экранным?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.