Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.51/37: Рейтинг темы: голосов - 37, средняя оценка - 4.51
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23

BITMAPINFOHEADER

01.12.2010, 04:58. Показов 8377. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно нужно со структуры BITMAPINFOHEADER считать нужную информацию (например %.biSizeImage). Но при чтении этой переменной результат не очень то информативен.
Вообщем не будем отличаться от вопросов созданных в этой теме и спросим - "В чём собственно проблема?"
Рисунок test.bmp - это 24-разрядный bmp рисунок, размером 100х120 px, залитый чёрным цветом.

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdafx.h"
#include <windows.h>
#include <string.h>
 
 
 
int main(int argc, char* argv[])
{
    FILE *input=fopen("test".bmp", "rb");
    if(!input)
    {
        printf("Error opening file!!!\n");
        return 1;
    }
    long size;
    fseek(input, 0, SEEK_END);
    size=ftell(input);
    fseek(input, 0, SEEK_SET);
    
    BITMAPINFOHEADER bmp;
    
    fread(&bmp, sizeof(BITMAPINFOHEADER), size, input);
 
    printf("Size =%d\n", size);
    
    printf("Size(using BMPINFO) =%d\n", bmp.biSizeImage);
 
    return 0;
}
На выходе имеем:
Size =36054
Size(using BMPINFO) =-858993460

Почему же все-таки, используя структуру BITMAPINFOHEADER, выводится значение -858993460??
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.12.2010, 22:05
Студворк — интернет-сервис помощи студентам
Да, я раньше уже понял, что вы об этом говорили))) Но ведь код в топике верный. А вывод на экран значения поля biSizeImage приводит к выводу мусора - значит это поле не инициализируется)))
Тоже мысли вслух)))
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
01.12.2010, 22:16
Цитата Сообщение от silent_1991 Посмотреть сообщение
А вывод на экран значения поля biSizeImage приводит к выводу мусора - значит это поле не инициализируется)))
Тоже факт! Можно до считывания добавить строку
C++
1
cout<<bmp.biSizeImage;
Чтоб понять, меняется ли это поле после fread, если да, значит не правильно читаем.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
01.12.2010, 22:19
Можно. Но лучше printf("%d", bmp.biSizeImage);

Не по теме:

Ну да, да, придираюсь)))

0
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23
02.12.2010, 00:29  [ТС]
Вообщем с помощью структуры BITMAPFILEHEADER выяснилось что в fread нужно считывать не поток, а один байт:
C++
1
fread(&bmp, sizeof(BITMAPFILEHEADER), 1, input);
После чего элемент bmp.bfSize структуры BITMAPFILEHEADER показывает то что нужно.
Но используя таким методом BITMAPINFOHEADER переменная biSizeImage всё равно выводит не то что нужно, но и не то что раньше.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
02.12.2010, 09:58
Цитата Сообщение от htonasral Посмотреть сообщение
Но используя таким методом BITMAPINFOHEADER переменная biSizeImage всё равно выводит не то что нужно, но и не то что раньше.
Похоже нельзя использовать структуру BITMAPINFOHEADER таким образом. Вот что я нарыл про формат BMP файлов:
BITMAPFILEHEADER

Эта структура описана в файле wingdi.h. Эта структура идет самой первой в файле BMP. Вот её описание.
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;

Первой переменной идет bfType - эта переменная содержит тип файла. В нормальном растре первыми буквами идет BM в виде ASCII или 4D42 в шестнадцатеричном виде.

Дальше bfSize должен содержать размер файла в байтах. Говорят, что это значение ненадежно и использовать его не стоит.

bfReserved1 & bfReserved2 зарезервированы и использовать их не нужно.

bfOffBits смещение в байтах от начала растра до массива данных. Этим можно пользоваться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
28. КОнкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования? Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная. Где разрыв . . .
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно» Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую: Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий? Да, такие данные есть, и они хорошо описаны и в российской,. . .
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу: https:/ / github. com/ altbodhi/ ReConMan По итогу пришел к мысли, что DU не дружат с существующими технологиями. От сериализации до отображения в реляционную. . .
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru