Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.90
Аццкий_Progremmer
2 / 2 / 0
Регистрация: 30.10.2008
Сообщений: 14
#1

Работа с BMP форматом - C++

30.10.2008, 23:33. Просмотров 5021. Ответов 1
Метки нет (Все метки)

Всем доброго времени суток
Проблема такая:
начал разбираться со струтурой BMP формата
пока описал только структуру BMP и считал заголовок BMP и его ИНФО
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
typedef struct {
 WORD type;
 DWORD size;
 WORD r1,r2;
 DWORD OffBits;
} BMPHEADER;
 
typedef struct {
 DWORD size;
 LONG width;
 LONG height;
 WORD Planes;
 WORD BitCount;
 DWORD compression;
 DWORD SizeImage;
 LONG XPelPerMetr;
 LONG YPelPerMetr;
 DWORD ClrUsed;
 DWORD ClrImportant;
} BMPINFO;
 
typedef struct {
 byte blue;
 byte green;
 byte red;
 byte reserved;
} BMPBODY;
 
MPBODY **load_bmp_to_array(char *filename) {
 HANDLE BMPFile=CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL, NULL); ;
 BMPHEADER BMPHeader;
 BMPINFO BMPInfo;
 unsigned long filesize;
 unsigned long filebuf;
 DWORD rw;
 int width,height;
 int blockread;
 boolean state=true;
 
 if (BMPFile) {
    if (!ReadFile(BMPFile,&BMPHeader,sizeof(BMPHeader),&rw,NULL)) state=false;
    if (!ReadFile(BMPFile,&BMPInfo,sizeof(BMPInfo),&rw,NULL)) state=false;
    if (state) {
      width=BMPInfo.width;
      height=BMPInfo.height;
 
    }
    blockread=1;//ТУТ ТОЧКА ПРЕРЫВАНИЯ!!!
 }
 
}
почему если в отладчике проссматривать значения то они не совпадают с реальными которые должны быть.
например картинка размером 640*512
при этом
BMPInfo.width=33554432 //ширина в пикселях
BMPInfo.height=65536//высота в пикселях
BMPInfo.SizeImage==15//размер изображения
в общем почти во в сех полях BMPInfo не те значения которые должны быть

BMPHeader вроде как считался нормально
по крайней мере BMPHeader.type=19778=4D42 как и должно быть
подскажите плиз в чем может быть проблема
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2008, 23:33     Работа с BMP форматом
Посмотрите здесь:

Работа с BMP-файлами (класс "8 битное BMP изображение) - C++
Написать класс "8 битное BMP изображение".Класс должен содержать 3 конструктора: конструктор по умолчанию, конструктор с параметрами и...

работа с rtf форматом - Visual C++
задача заключается в том что мы читаем текст из *.тхт файла в который вставлены теги RTF формата (например :...

Работа с BMP - Visual C++
Доброе время суток! скажу сразу, не очень силён в С++... Необходимо вытащить матрицы из которых состоит BMP (заголовочные не...

Работа с картинками BMP - C++
Как проверить рисунок типа BMP на количество цветов?

Работа с BMP файлом - Visual C++
Доброго всем дня. Мне нужно сделать приложение которое будет работать с BMP рисунком. То есть суть программки приблизительно такая: 1....

Работа с .bmp файлами - C++
Добрый день, нужно увеличить размер .bmp картинки в n раз. Код не обработан, всё находится в Main. Проблема в том, что при вводе n>=2...

Скриншот, работа с bmp - C++
Возникла необходимость создания скриншота неактивого окна. В результате долгих поисков, по гуглу я наткнулся на следующий рабочий код: ...

Работа с bmp изображением - C++
Всем привет! Интересует вопрос:Каким образом можно считать bmp изображение в матрицу, изменить его(аля инстаграмм), а затем сохранить в...

Работа с BMP в Visual C++ - Visual C++
Привет всем, кто читает это сообщение. Пишу в большой надежде, что мне хоть кто-нибудь поможет. Я работаю в Visual C++ и пишу...

Работа с BMP изображаниями - C++
Доброго дня суток, форумчане! Я начал писать программу чтения BMP-шки в массив. Вот ее код: #include <iostream> #include <fstream> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bota2827
Сообщений: n/a
13.05.2009, 16:13     Работа с BMP форматом #2
проблема в смещении внутри структуры:
C++
1
2
3
4
5
6
7
typedef struct {
 WORD type;    //смещение 0x00
 // здесь в памяти будет дырка размером 2 байта
 DWORD size;  // смещение 0x04
 WORD r1,r2;   // итд
 DWORD OffBits;
} BMPHEADER;
поэтому при чтении из файла первые два байта переменной DWORD size считываются в дырку и далее всё смещено на два байта.
дырки в структурах образуются потому что все переменные в с структуре хранятся на смещениях кратным их размеру.
можно попробовать прочитать каждую из переменных отдельно. Я сделал стдельно переменную WORD type и тогда структура получилась без дырок. прочитал type потом сразу всю структуру и всё работает отлично.
Yandex
Объявления
13.05.2009, 16:13     Работа с BMP форматом
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru