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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> На что указывает HBITMAP? то бишь, как выглядит bmp в ОП? 
V
    Опции темы
Тутанхамец
Дата 22.2.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Нашёл кучу информации о том, как выглядит bmp в файле на диске. Но нигде не сказано, каков он в памяти после, например, LoadImage?

Сначала подумал, что HBITMAP должен указывать на BITMAP. Проверил с помощью CopyMemory. Непохоже. Непохоже и на BITMAPINFOHEADER. И уж тем более непохоже на BITMAPFILEHEADER.

Уважаемые, заранее благодарен smile

PM MAIL   Вверх
Romikgy
Дата 22.2.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

HBITMAP CreateCompatibleBitmap(

    HDC hdc,    // handle to device context 
    int nWidth,    // width of bitmap, in pixels  
    int nHeight    // height of bitmap, in pixels  
   );    
 

Parameters

hdc

Identifies a device context. 

nWidth

Specifies the bitmap width, in pixels. 

nHeight

Specifies the bitmap height, in pixels. 

 

Return Values

If the function succeeds, the return value is a handle to the bitmap.
If the function fails, the return value is NULL. 

handle to the bitmap.
Это не указатель а хендл, т.е. подобное хендлу любого окна виндов smile


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Тутанхамец
Дата 22.2.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Ты уж прости, но либо я не понял ответа, либо ты не понял вопроса. smile

Всегда считал, что хэндл (который определен как void *) это и есть указатель.

Меня интересует, что я найду в тех байтах памяти, на которые указывает HBITMAP. Что там будет? Структура какая-то, которая описывает картинку? Вряд ли ведь сразу массив байтов картинки?
PM MAIL   Вверх
Romikgy
Дата 22.2.2006, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n 
DECLARE_HANDLE(HBITMAP);

Я не совсем понял дефайн, но как я понял что хендл идет указатель на структуру, а структуре целое число!
число указывает номер в хендлах зарегестрерованых в системе, имхо
Цитата(Тутанхамец @ 22.2.2006, 10:01 Найти цитируемый пост)
что я найду в тех байтах памяти

Имхо смысла ковырятся в хендлах нету
Цитата(Тутанхамец @ 22.2.2006, 10:01 Найти цитируемый пост)
Структура какая-то,

описана выше


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Тутанхамец
Дата 22.2.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Да мне не сам хендл был нужен, а картинка, которая за ним в памяти лежит, но не через HBITMAP, а побайтово. В API для этого есть GetDIBits, SetDIBits и CreateDIBSection, но там уж больно много структур, сжатия и всего прочего. Есть еще вариант работать с картинкой, скидывая ее во временный файл на диск, а это хоть медленнее, но проще.

Ладно, закрыли тему. smile
PM MAIL   Вверх
Romikgy
Дата 22.2.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(Тутанхамец @ 22.2.2006, 10:39 Найти цитируемый пост)
Да мне не сам хендл был нужен, а картинка, которая за ним в памяти лежит, но не через HBITMAP, а побайтово.

Цитата(Тутанхамец @ 22.2.2006, 10:39 Найти цитируемый пост)
GetDIBits

Чем не нравится?

Цитата(Тутанхамец @ 22.2.2006, 10:39 Найти цитируемый пост)
Ладно, закрыли тему.

Ну так и закрывай smile






--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Fixin
Дата 22.2.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


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

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



Есть ф-ция GetBitmapBits - то что тебе нужно.
PM MAIL ICQ   Вверх
Тутанхамец
Дата 23.2.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Спасибо, Fixin smile Хотя до GetBitmapsBits и SetBitmapBits я уже своим умом допёр. smile
PM MAIL   Вверх
adonin
Дата 24.2.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

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



Цитата(Тутанхамец @ 22.2.2006, 11:01 Найти цитируемый пост)
Всегда считал, что хэндл (который определен как void *) это и есть указатель.


Хотя тема и закрыта, считаю необходимым развеять приведённое выше заблуждение.
HANDLE объекта это не указатель на объект, а его идентификатор. Так HANDLE файла - это id объекта FILE_OBJECT, с которым оперирует ядро. Коду 3-го кольца привилегий прямой доступ туда не желателен. Поэтому приложению возвращают не указатель (POINTER), а описатель (HANDLE). Имея описатель объекта, ядро находит объект в списке объектов и производит над ним требуемые действия.
HANDLE HBITMAP не есть указатель на объект.

--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
Тутанхамец
Дата 25.2.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Тему никогда не поздно открыть опять. smile Я просто руководствовался следующим:

Цитата

Справедливости ради, надо отметить, что в Win32 присваиваются хэндлы чему угодно - окну, меню, курсору, иконке и т.д. Фактичеаки хэндл - это указатель на блок памяти, в котормо размещен тот ии иной объект. В заголвочных файлах тип HANDLE определен как void *...
...Уважаемый читатель! Обратите внимание на вытекающее из этого положения следствия. Раз уж объект имеет хэндл, который является УКАЗАТЕЛЕМ, то, значит, этот объект сам расположен в памяти! Другими словами, в тех случаях, когда мы должны получить хэндл того или иного объекта фактически мы должны получить адрес загруженного в память объекта!

П.В. Румянцев, "Азбука программирования в Win32 API


Видимо, я превратно понял мысль П.В. smile

Получается, не используя специальные функции типа GetDIBits, я не могу найти, где в памяти хранятся байты битмапа и связанные с ними структуры? "Найти"="узнать начальный адрес и размер".
PM MAIL   Вверх
Fixin
Дата 25.2.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


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

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



Цитата(Тутанхамец @ 25.2.2006, 09:39 Найти цитируемый пост)
не используя специальные функции
Ну да. в этом суть безопасности ядра системы, чтобы ты не записал куда-нибудь что-нибудь, а в результате вся система накрылась.
Добавлено @ 13:53
Цитата(Тутанхамец @ 25.2.2006, 09:39 Найти цитируемый пост)
специальные функции типа GetDIBits
Они вынимают из дескриптора адрес (в данном случае)

PM MAIL ICQ   Вверх
Тутанхамец
Дата 25.2.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

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



Ладно, с хбитмапом более-менее ясно. Тем более, что я всё равно решил работать с картинкой не в памяти, а сбрасывать ее во временный промежуточный файл, а оттуда уже читать.

Fixin, скажи, а кто такой шушпанчик? smile
PM MAIL   Вверх
Fixin
Дата 25.2.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


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

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



Цитата(Тутанхамец @ 25.2.2006, 16:52 Найти цитируемый пост)
кто такой шушпанчик?
Поиск по форуму.

PM MAIL 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.

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


 




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


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

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