![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Я до сих пор не могу понять, почему мы не можем обойтись без совместимого контекста памяти при выводе изображения. Из всего того что Я прочитал, Я понял следующее:
1) Мы не сожем выбрать в контекст дисплея получаемого с помощью BeginPaint() или CreateDC(), т.к формат изображения не соответствует формату вывода контекста устройства, привильно ли Я понял? 2) Для этого нам нужно создать совместимый контекст памяти с помощью CreateCompatibleDC(), выбрать в него хэндл картинки и с помощью BitBlt() блочно спопировать растровое изображение из совместимого контекста в контекст дисплея, так ? Подскажите что не так в моих рассуждениях, и в каком плане не совпадаю форматы из п.1 если Я правильно понял. |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
выбрать что? свой битмап выбрать в экранный контекст мы можем, но смысл экранного контекста в его битмапе и заключается, это приемник (окно в видеопамять), запись в который позволяет увидеть содержимое на экране привожу, надеюсь, доходчивый пример на абстракциях:
а теперь то же самое, только без комментариев:
теперь попробуй выбрать в DC свой битмап, что получится?
смысл понятен? подсказка: в обоих случаях достаточно определить, будет ли выводить print загруженную картинку, т.е. число 123 Это сообщение отредактировал(а) GremlinProg - 30.5.2009, 15:34 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Смысл понятен как это делается, но мне не понятно почему не будет работать так:
Почему hBitmap нельзя напримую загрузить в hdc |
|||
|
||||
| GremlinProg |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
видимо смысл все таки не был понятен пересмотри последний пример и объясни своими словами, почему 123 не поступит в метод print Добавлено через 2 минуты и 4 секунды если не получится, то придется тему перенести в другой раздел Добавлено через 3 минуты и 55 секунд поправочка:
Добавлено через 5 минут и 8 секунд аналогично и с picture:
Добавлено через 6 минут и 34 секунды лучше перепишу:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||||
|
|||||||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
||||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
нет
потому что этот код не производит ни каких операций с памятью -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
GremlinProg, Мог бы ты дать ссылку на русском языке, чтобы Я мог почитать про это и больше не спрашивать на форуме ?
|
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
если поймешь как работают эти 2 примера, то поймешь как работают и граф. контексты
(запусти каждый в отладчике, пройди по шагам) это очень простые примеры, возможно сложнее - понять взаимосвязь с API, но для этого смотри соответствия: для первого примера:
а для второго примера, ты и сам уже приводил:
честно говоря, я не помню, чтобы это детально описывалось где-либо, кроме как в документации майкрософт может Соковиков поможет, он держится довольно близко к оригиналу (хотя перевел далеко не все) оригинал тут -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| nefton |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 28.3.2013 Репутация: нет Всего: нет |
Кажется до меня дошло.
Есть где-то память. Конкретные ячейки, с которых системно-аппаратно считывается картинка в монитор. И есть образно-указатель на эту память - контекст рабочего стола к примеру. Поскольку память у нас физически жёстко привязана к определённым ячейкам - то логично что и указатель указывает в одно и тоже место всегда и его менять смысла нету. (наверное и возможности нету Теперь почему мы создаём в памяти картинку. Наверное так просто удобнее. Теоретически конечно можно писать прям в ту самую память контекста рабочего стола, но либо это неудобно либо виндовс вообще не даст этого сделать кроме как BitBlt из совместимой памяти. |
|||
|
||||
![]()
|
| Правила форума "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. |