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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с Bitmap 
:(
    Опции темы
gost
Дата 23.10.2005, 10:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Расскажите пожалуйста как подгрузить бмп-картинку. То есть надо на форме вывести бмпху с использованием АПИ-функций.
  Вверх
Earnest
Дата 23.10.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



В чистом API нет функций типа LoadBitmap (bmp-file) или ShowBitmap.
Формат простой, вот все, что нужно знать:

Цитата
Bitmap Storage
Bitmaps should be saved in a file that uses the established bitmap file format and assigned a name with the three-character .bmp extension. The established bitmap file format consists of a BITMAPFILEHEADER structure followed by a BITMAPINFOHEADER, BITMAPV4HEADER, or BITMAPV5HEADER structure. An array of RGBQUAD structures (also called a color table) follows the bitmap information header structure. The color table is followed by a second array of indexes into the color table (the actual bitmap data).

The bitmap file format is shown in the following illustration.

BITMAPFILEHEADER
BITMAPINFOHEADER
RGBQUAD array
color index array

Windows 95, Windows NT 4.0: Replace the BITMAPINFOHEADER structure with the BITMAPV4HEADER structure.

Windows 98/Me, Windows 2000/XP: Replace the BITMAPINFOHEADER structure with the BITMAPV5HEADER structure.

The members of the BITMAPFILEHEADER structure identify the file; specify the size of the file, in bytes; and specify the offset from the first byte in the header to the first byte of bitmap data. The members of the BITMAPINFOHEADER, BITMAPV4HEADER, or BITMAPV5HEADER structure specify the width and height of the bitmap, in pixels; the color format (count of color planes and color bits-per-pixel) of the display device on which the bitmap was created; whether the bitmap data was compressed before storage and the type of compression used; the number of bytes of bitmap data; the resolution of the display device on which the bitmap was created; and the number of colors represented in the data. The RGBQUAD structures specify the RGB intensity values for each of the colors in the device's palette.

The color-index array associates a color, in the form of an index to an RGBQUAD structure, with each pixel in a bitmap. Thus, the number of bits in the color-index array equals the number of pixels times the number of bits needed to index the RGBQUAD structures. For example, an 8x8 black-and-white bitmap has a color-index array of 8 * 8 * 1 = 64 bits, because one bit is needed to index two colors. The Redbrick.bmp, mentioned in About Bitmaps, is a 32x32 bitmap with 16 colors; its color-index array is 32 * 32 * 4 = 4096 bits because four bits index 16 colors.

To create a color-index array for a top-down bitmap, start at the top line in the bitmap. The index of the RGBQUAD for the color of the left-most pixel is the first n bits in the color-index array (where n is the number of bits needed to indicate all of the RGBQUAD structures). The color of the next pixel to the right is the next n bits in the array, and so forth. After you reach the right-most pixel in the line, continue with the left-most pixel in the line below. Continue until you finish with the entire bitmap. If it is a bottom-up bitmap, start at the bottom line of the bitmap instead of the top line, still going from left to right, and continue to the top line of the bitmap.

The following hexadecimal output shows the contents of the file Redbrick.bmp.

0000    42 4d 76 02 00 00 00 00  00 00 76 00 00 00 28 00
0010    00 00 20 00 00 00 20 00  00 00 01 00 04 00 00 00
0020    00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
0030    00 00 00 00 00 00 00 00  00 00 00 00 80 00 00 80
0040    00 00 00 80 80 00 80 00  00 00 80 00 80 00 80 80
0050    00 00 80 80 80 00 c0 c0  c0 00 00 00 ff 00 00 ff
0060    00 00 00 ff ff 00 ff 00  00 00 ff 00 ff 00 ff ff
0070    00 00 ff ff ff 00 00 00  00 00 00 00 00 00 00 00
0080    00 00 00 00 00 00 00 00  00 00 00 00 00 00 09 00
0090    00 00 00 00 00 00 11 11  01 19 11 01 10 10 09 09
00a0    01 09 11 11 01 90 11 01  19 09 09 91 11 10 09 11
00b0    09 11 19 10 90 11 19 01  19 19 10 10 11 10 09 01
00c0    91 10 91 09 10 10 90 99  11 11 11 11 19 00 09 01
00d0    91 01 01 19 00 99 11 10  11 91 99 11 09 90 09 91
00e0    01 11 11 11 91 10 09 19  01 00 11 90 91 10 09 01
00f0    11 99 10 01 11 11 91 11  11 19 10 11 99 10 09 10
0100    01 11 11 11 19 10 11 09  09 10 19 10 10 10 09 01
0110    11 19 00 01 10 19 10 11  11 01 99 01 11 90 09 19
0120    11 91 11 91 01 11 19 10  99 00 01 19 09 10 09 19
0130    10 91 11 01 11 11 91 01  91 19 11 00 99 90 09 01
0140    01 99 19 01 91 10 19 91  91 09 11 99 11 10 09 91
0150    11 10 11 91 99 10 90 11  01 11 11 19 11 90 09 11
0160    00 19 10 11 01 11 99 99  99 99 99 99 99 99 09 99
0170    99 99 99 99 99 99 00 00  00 00 00 00 00 00 00 00
0180    00 00 00 00 00 00 90 00  00 00 00 00 00 00 00 00
0190    00 00 00 00 00 00 99 11  11 11 19 10 19 19 11 09
01a0    10 90 91 90 91 00 91 19  19 09 01 10 09 01 11 11
01b0    91 11 11 11 10 00 91 11  01 19 10 11 10 01 01 11
01c0    90 11 11 11 91 00 99 09  19 10 11 90 09 90 91 01
01d0    19 09 91 11 01 00 90 10  19 11 00 11 11 00 10 11
01e0    01 10 11 19 11 00 90 19  10 91 01 90 19 99 00 11
01f0    91 01 11 01 91 00 99 09  09 01 10 11 91 01 10 91
0200    99 11 10 90 91 00 91 11  00 10 11 01 10 19 19 09
0210    10 00 99 01 01 00 91 01  19 91 19 91 11 09 10 11
0220    00 91 00 10 90 00 99 01  11 10 09 10 10 19 09 01
0230    91 90 11 09 11 00 90 99  11 11 11 90 19 01 19 01
0240    91 01 01 19 09 00 91 10  11 91 99 09 09 90 11 91
0250    01 19 11 11 91 00 91 19  01 00 11 00 91 10 11 01
0260    11 11 10 01 11 00 99 99  99 99 99 99 99 99 99 99
0270    99 99 99 99 99 90
The following table shows the data bytes associated with the structures in a bitmap file.

Structure Corresponding bytes
BITMAPFILEHEADER 0x00 – 0x0D
BITMAPINFOHEADER 0x0E – 0x35
RGBQUAD array 0x36 – 0x75
Color-index array 0x76 – 0x275


--------------------------------------------------------------------------------

© 2002 Microsoft Corporation. All rights reserved.


Ну и все остальное тоже есть в MSDN, по ключевому слову bitmaps.
Добавлено @ 14:29
Для вывода на экран смотри StretchDIBits.


--------------------
...
PM   Вверх
Earnest
Дата 23.10.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Если тебе ничего особо не надо от bitmap'ов (прямого и быстрого доступа к битам, работы с очень большими растрами и т.д.), посмотри функции\классы GDI+.


--------------------
...
PM   Вверх
maxim1000
Дата 23.10.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
В чистом API нет функций типа LoadBitmap (bmp-file)

есть функция LoadImage, которая в том числе может и bmp-шки загружать...

ну а если картинка загружена и есть ее HBITMAP то показать ее несложно: сделать memory dc, выбрать в нем bitmap и выполнить операцию BitBlt...
Добавлено @ 16:54
только там есть один момент, который мне не понравился, а прояснить мне его было тогда лень/не нужно smile
как-то загружал я картинку с помощью этой функции и заметил, что несколько младших бит (по-моему, 3) оказались нулевыми, подумал, что это картинка такая, но нет, у нее все биты использовались...
может, это я что-то тогда напутал, может, нет
в любом случае, если будет использоваться эта функция, я бы посоветовал обратить на это внимание...


--------------------
qqq
PM WWW   Вверх
Earnest
Дата 23.10.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Да, точно, LoadImage умеет загружать не только из ресурсов, это я пропустила.

2maxim1000
Ведь LoadImage возвращает надо полагать HBITMAP, и прямого доступа к битам нет. Их специально нужно запрашивать в свой буфер. Что ты имел в виду, говоря, что младшие биты оказались нулевыми? Как узнал, то есть.
Может выравнивание? Действительно существует тонкость: в bmp-файле, так же как в DIB выравнивание на 4 байта, а в BITMAP - на 2.



--------------------
...
PM   Вверх
maxim1000
Дата 23.10.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Ведь LoadImage возвращает надо полагать HBITMAP, и прямого доступа к битам нет. Их специально нужно запрашивать в свой буфер. Что ты имел в виду, говоря, что младшие биты оказались нулевыми? Как узнал, то есть.

упс... виноват... немного некорректно описал ситуацию
дело было как
тут где-то даже была тема - люди пытались сжать картинку
ну и я взял, да и скачал ее (bmp-шка была)
сделал LoadImage
начал простенький анализ с помощью GetPixel (о скорости задумываться рановато было)
так вот он выдавал все числа, кратные 8
я даже в тему написал, что сжать очень просто - там по 3 бита на кажый байт гуляет
потом понял, что, как обычно, поспешил smile
посмотрел напрямую коды в картинке - нормально, никакие биты не гуляли
только вот было это кучу месяцев назад
так что:
Цитата(maxim1000 @ 23.10.2005, 16:50)
может, это я что-то тогда напутал, может, нет


а некорректность предыдущего описания ситуации в том, что тут еще падает подозрение и на GetPixel и на сам контекст устройства (мало с чем он совместимый был)...


--------------------
qqq
PM WWW   Вверх
maxim1000
Дата 23.10.2005, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



хм... да, похоже, я что-то тогда напутал
потому что проверил только что - все нормально, все биты в порядке...


--------------------
qqq
PM WWW   Вверх
Helicopterr
Дата 23.10.2005, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

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



Пользуясь темой хочу спросить...

Как правильно организовать вывод BITMAP при закрузке программы?


--------------------
people can fly
PM MAIL   Вверх
cardinal
Дата 23.10.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 1
Всего: 99





--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Helicopterr
Дата 4.11.2005, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

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



cardinal много не спорю...
у меня при создании дочернего окна скажем в метке case WM_CREATE: затем не получается загрузить в него рисунок:
LoadBitmap (hwnd_child, MAKEINTRESOURCE(IDB_BITMAP1)); //загружаем BMP
То есть дочернее окно есть но без рисунка. Вот и хотел узнать как это опытные товарищи делают...

Это сообщение отредактировал(а) Helicopterr - 4.11.2005, 22:42


--------------------
people can fly
PM MAIL   Вверх
Quadri
Дата 6.11.2005, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 29.12.2004

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



Цитата(Earnest @ 23.10.2005, 14:38)
Если тебе ничего особо не надо от bitmap'ов (прямого и быстрого доступа к битам, работы с очень большими растрами и т.д.), посмотри функции\классы GDI+.

а если надо?

Это сообщение отредактировал(а) Quadri - 6.11.2005, 14:27
PM MAIL   Вверх
Earnest
Дата 8.11.2005, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Тогда CreateDIBSection и дальше ручками.


--------------------
...
PM   Вверх
lnk
Дата 10.11.2005, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.11.2005
Где: Берег Слоновой Ко сти

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



Если кому еще надо, могу скинуть пару класов для работы с DIB/DDB недавно писал такое.
Там загрузка,сохранение из файла без LoadImage, вывод на екран, преоразование, etc....
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.0899 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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