| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > работа с Bitmap |
| Автор: gost 23.10.2005, 10:41 |
| Расскажите пожалуйста как подгрузить бмп-картинку. То есть надо на форме вывести бмпху с использованием АПИ-функций. |
| Автор: Earnest 23.10.2005, 14:27 | ||
| В чистом API нет функций типа LoadBitmap (bmp-file) или ShowBitmap. Формат простой, вот все, что нужно знать:
Ну и все остальное тоже есть в MSDN, по ключевому слову bitmaps. Добавлено @ 14:29 Для вывода на экран смотри StretchDIBits. |
| Автор: Earnest 23.10.2005, 14:38 |
| Если тебе ничего особо не надо от bitmap'ов (прямого и быстрого доступа к битам, работы с очень большими растрами и т.д.), посмотри функции\классы GDI+. |
| Автор: maxim1000 23.10.2005, 16:50 | ||
есть функция http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/introductiontoresources/resourcereference/resourcefunctions/loadimage.asp, которая в том числе может и bmp-шки загружать... ну а если картинка загружена и есть ее HBITMAP то показать ее несложно: сделать memory dc, выбрать в нем bitmap и выполнить операцию BitBlt... Добавлено @ 16:54 только там есть один момент, который мне не понравился, а прояснить мне его было тогда лень/не нужно как-то загружал я картинку с помощью этой функции и заметил, что несколько младших бит (по-моему, 3) оказались нулевыми, подумал, что это картинка такая, но нет, у нее все биты использовались... может, это я что-то тогда напутал, может, нет в любом случае, если будет использоваться эта функция, я бы посоветовал обратить на это внимание... |
| Автор: Earnest 23.10.2005, 19:09 |
| Да, точно, LoadImage умеет загружать не только из ресурсов, это я пропустила. 2maxim1000 Ведь LoadImage возвращает надо полагать HBITMAP, и прямого доступа к битам нет. Их специально нужно запрашивать в свой буфер. Что ты имел в виду, говоря, что младшие биты оказались нулевыми? Как узнал, то есть. Может выравнивание? Действительно существует тонкость: в bmp-файле, так же как в DIB выравнивание на 4 байта, а в BITMAP - на 2. |
| Автор: maxim1000 23.10.2005, 20:54 | ||||
упс... виноват... немного некорректно описал ситуацию дело было как тут где-то даже была тема - люди пытались сжать картинку ну и я взял, да и скачал ее (bmp-шка была) сделал LoadImage начал простенький анализ с помощью GetPixel (о скорости задумываться рановато было) так вот он выдавал все числа, кратные 8 я даже в тему написал, что сжать очень просто - там по 3 бита на кажый байт гуляет потом понял, что, как обычно, поспешил посмотрел напрямую коды в картинке - нормально, никакие биты не гуляли только вот было это кучу месяцев назад так что:
а некорректность предыдущего описания ситуации в том, что тут еще падает подозрение и на GetPixel и на сам контекст устройства (мало с чем он совместимый был)... |
| Автор: maxim1000 23.10.2005, 21:15 |
| хм... да, похоже, я что-то тогда напутал потому что проверил только что - все нормально, все биты в порядке... |
| Автор: Helicopterr 23.10.2005, 22:37 |
| Пользуясь темой хочу спросить... Как правильно организовать вывод BITMAP при закрузке программы? |
| Автор: cardinal 23.10.2005, 23:13 |
| Тут много чего есть: http://forum.vingrad.ru/index.php?act=Search&CODE=show&searchid=e7624207dddedb56f547e401ae1e2630&search_in=posts&result_type=topics&highlite=bitmap |
| Автор: Helicopterr 4.11.2005, 22:41 |
| cardinal много не спорю... у меня при создании дочернего окна скажем в метке case WM_CREATE: затем не получается загрузить в него рисунок: LoadBitmap (hwnd_child, MAKEINTRESOURCE(IDB_BITMAP1)); //загружаем BMP То есть дочернее окно есть но без рисунка. Вот и хотел узнать как это опытные товарищи делают... |
| Автор: Quadri 6.11.2005, 14:25 | ||
а если надо? |
| Автор: Earnest 8.11.2005, 20:11 |
| Тогда CreateDIBSection и дальше ручками. |
| Автор: lnk 10.11.2005, 23:49 |
| Если кому еще надо, могу скинуть пару класов для работы с DIB/DDB недавно писал такое. Там загрузка,сохранение из файла без LoadImage, вывод на екран, преоразование, etc.... |