![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
Функции SetDIBits, SetBitmapBits, SetDIBitsToDevice
не срабатывают при увеличении размера рисунка. Может сработат, а может и нет, причем вернет 0 и она и GetLastError. Почему такая нестабильность? Кто-нибудь с таким сталкивался? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Что значит - не срабатывает?
-------------------- ... |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
Это значит что возвращает 0
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, бывало такое, что SetDIBitsToDevice иногда не заполняло девайс. Выбрал альтернативу - рендеринг IPicture.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
не пойдеть
![]() |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
так что лучше, скорость или надежность? На некоторых виндовозах SetDIBitsToDevice вообще отказывался работать, возможно тут аппаратная зависимость: мне приходилось рендерить на довольно ёмкие девайсы
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
deniska |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: нет Всего: 0 |
Нет, ну должно же быть какое-то нормальное объяснение почему несрабатывает.
Честно говоря первый раз столкнулся с фигней. Всегда думал что на АПИ писать надежнее ![]() Добавлено @ 13:08 В конце концов IPicture в итоге теми же ф-циями пользуется. Наверно..... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
IPicture, канешн теми же, видимо есть где-то проблема, которую IPicture обходит, потому что я досканально все проверил, уповал на адрес(его варавнивание), дак нет, не в нем дело, все параметры просчитывал, в принципе использую RGBQUAD, поэтому проблем с выравниванием каждой строки на границе слова у мя не было, но это тоже необходимо учитывать, проверь это дело у себя.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
А вместо них нельзя использовать BitBlt со товарищи? Никогда не встречалась с их "не-срабатываниями". Да, несколько другие исходные данные: 2 контекста, а не растр + контекст, но это вообще не проблема.
В чем специфика задачи, что нужно именно SetDIBits? Блиттинг работает не медленнее... Кстати, функции IPicture. скорее всего, как раз на блиттингах реализованы. -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Earnest, а доступ к растру прикажешь GetPixel'ом организовывать? )) Очевидно же, что необходим прямой доступ.
Добавлено @ 18:33 IPicture организует диб-образ в вирт. памяти(это можно проверить GetObject'ом), следовательно дамп образа мэпируется в граф. девайс напрямую, а SetDIBits, по крайней мере, это делает. Вывод: IPicture скорее всего опирается на SetDIBits и ей подобные. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
А кто против? Заведи DIB-секцию, и будет и прямой доступ, и возможность выбора в контекст.
DIB-растр в DIB-секцию элементарно превращается. Добавлено @ 06:52 Кстати, работа с контекстами (и DIB-секцией) хороша еще тем, что автоматически получаешь возможность растризовать любые векторные примитивы - GDI рисует... -------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Earnest, а в чем, собственно, проблема? Я вроде как о DIB-секции и говорю. В этом и преимущество IPicture. Только секция создается сразу, без лишних вопросов. Это экономит кучу времени.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
IPicture, как бы оно не реализовывалась, это обертка вокруг API, т.е. есть какие-никакие лишние издержки. Я не знаю, почему автор не хочет IPicture. Может, GDI+ не хочет подключать. Поэтому и предлагаю АПИшную альтернативу функциям SetDIBits и пр., которая всегда работает - я, по крайней мере, не сталкивалась с косяками блиттинга. Хотя не исключено, что у него просто косяки в коде.
-------------------- ... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
GDI+ тут совершенно ни при чем (может путаешь с оберткой CPicture). Ему просто не хочется связываться с OLE, как он уже успел заметить (хотя, на мой взгляд, это не должно быть так обременительно, как например тот же GDI+, которому нужна таки библиотека. OLE поддерживается везде и уже давно)
Добавлено @ 10:03 Альтернатива, конечно, всегда есть. Можно использовать и CreateDIBSection, но, если необходимо загрузить в эту секцию растр из файла любого из зарегистрированных в системе граф. типов (jpeg, bmp, tif...), то я все же порекомендовал бы IPicture. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 33 Всего: 183 |
Да, пожалуй, спутала...
Не... OLE никому не порекомендую - уж там-то издержки... Лучше тогда CImage использовать (GDI+ ИМХО, лучше чем OLE). А класс простой. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |