| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > На что указывает HBITMAP? |
| Автор: Тутанхамец 22.2.2006, 10:33 |
| Нашёл кучу информации о том, как выглядит bmp в файле на диске. Но нигде не сказано, каков он в памяти после, например, LoadImage? Сначала подумал, что HBITMAP должен указывать на BITMAP. Проверил с помощью CopyMemory. Непохоже. Непохоже и на BITMAPINFOHEADER. И уж тем более непохоже на BITMAPFILEHEADER. Уважаемые, заранее благодарен |
| Автор: Romikgy 22.2.2006, 10:47 | ||
handle to the bitmap. Это не указатель а хендл, т.е. подобное хендлу любого окна виндов |
| Автор: Тутанхамец 22.2.2006, 11:01 |
| Ты уж прости, но либо я не понял ответа, либо ты не понял вопроса. Всегда считал, что хэндл (который определен как void *) это и есть указатель. Меня интересует, что я найду в тех байтах памяти, на которые указывает HBITMAP. Что там будет? Структура какая-то, которая описывает картинку? Вряд ли ведь сразу массив байтов картинки? |
| Автор: Romikgy 22.2.2006, 11:16 | ||
Я не совсем понял дефайн, но как я понял что хендл идет указатель на структуру, а структуре целое число! число указывает номер в хендлах зарегестрерованых в системе, имхо Имхо смысла ковырятся в хендлах нету описана выше |
| Автор: Тутанхамец 22.2.2006, 11:39 |
| Да мне не сам хендл был нужен, а картинка, которая за ним в памяти лежит, но не через HBITMAP, а побайтово. В API для этого есть GetDIBits, SetDIBits и CreateDIBSection, но там уж больно много структур, сжатия и всего прочего. Есть еще вариант работать с картинкой, скидывая ее во временный файл на диск, а это хоть медленнее, но проще. Ладно, закрыли тему. |
| Автор: Fixin 22.2.2006, 15:32 |
| Есть ф-ция GetBitmapBits - то что тебе нужно. |
| Автор: Тутанхамец 23.2.2006, 21:01 |
| Спасибо, Fixin |
| Автор: adonin 24.2.2006, 12:56 | ||
Хотя тема и закрыта, считаю необходимым развеять приведённое выше заблуждение. HANDLE объекта это не указатель на объект, а его идентификатор. Так HANDLE файла - это id объекта FILE_OBJECT, с которым оперирует ядро. Коду 3-го кольца привилегий прямой доступ туда не желателен. Поэтому приложению возвращают не указатель (POINTER), а описатель (HANDLE). Имея описатель объекта, ядро находит объект в списке объектов и производит над ним требуемые действия. HANDLE HBITMAP не есть указатель на объект. |
| Автор: Тутанхамец 25.2.2006, 09:39 | ||
Тему никогда не поздно открыть опять.
Видимо, я превратно понял мысль П.В. Получается, не используя специальные функции типа GetDIBits, я не могу найти, где в памяти хранятся байты битмапа и связанные с ними структуры? "Найти"="узнать начальный адрес и размер". |
| Автор: Fixin 25.2.2006, 13:52 |
| Ну да. в этом суть безопасности ядра системы, чтобы ты не записал куда-нибудь что-нибудь, а в результате вся система накрылась. Добавлено @ 13:53 Они вынимают из дескриптора адрес (в данном случае) |
| Автор: Тутанхамец 25.2.2006, 16:52 |
| Ладно, с хбитмапом более-менее ясно. Тем более, что я всё равно решил работать с картинкой не в памяти, а сбрасывать ее во временный промежуточный файл, а оттуда уже читать. Fixin, скажи, а кто такой шушпанчик? |
| Автор: Fixin 25.2.2006, 20:18 |
| Поиск по форуму. |