Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение BITMAPFILEHEADER 
:(
    Опции темы
AndyY
Дата 2.6.2004, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



cardinal
пробовал конечно. работает, но не всегдаsmile.gif - некоторые проги пишут левую инфу перед непосредственно дибом. фиксиsmile.gif

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


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


Инженер
****


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

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



Цитата
некоторые проги пишут левую инфу перед непосредственно дибом.

А что именно?
Цитата
выравнивании структур

А это что? Просвети плиз.


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

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


Опытный
**


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

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



cardinal
вспомнил. bitmapinfoheader лежит за bitmafileheader - это правда.
неправда то, что за bitmapinfoheader сразу лежит диб даже при отсутствии паллитры.
впрочем, hunter видно и сам разобрался с проблемой, а мне вопрос чтения дибов неинтересен - будет надо - вопросов не возникнет.


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


Инженер
****


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

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



Цитата
неправда то, что за bitmapinfoheader сразу лежит диб даже при отсутствии паллитры.

Я такого не говорил.

Вот структура bmp:
http://www.fortunecity.com/skyscraper/wind...4/bmpffrmt.html


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

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


Шустрый
*


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

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



Ya,Ya глюк кмопилера меняй старший-младший байт(в каждом считанном слове) местами. Если самзаголовок делал под MSVC, то такое наверняка поможет.

Это сообщение отредактировал(а) Sined - 3.6.2004, 12:58
PM MAIL   Вверх
_hunter
Дата 3.6.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



код еще не пробывал ( приду домой -- проверю ) но сразу вопрос:
bfType -- WORD, из за выравнивания он приводится к DWORD соответсвенно все следующие за ним значения плывут.
даже при таком присвоении: psf = *((BMPFILEHEADER*)gbuf);
два байта уйдут не по адресу sad.gif

я прав?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cardinal
Дата 3.6.2004, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Цитата
из за выравнивания он приводится к DWORD

я выше уже спрашивал, что такое выравнивание, но никто нчиего не объяснил bored.gif.

А вообще что это такое
Цитата
bfType -- WORD, из за выравнивания он приводится к DWORD соответсвенно все следующие за ним значения плывут.

программируешь ты или твой компилятор? Конечно след. значения плывут если ты меняшь структуру struct. Я в шоке smile.gif


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

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



программирую то я smile.gif, но MS в .h прописали -- выравнивание по DWORD' y -- и единственный путь -- править wingdi.h -- что не есть првильно

выравнивание -- дополнение нулями полей стрктур до определенного размера -- 1, 2, 4, 8 байт
т.е. структура {char a, WORD b} в памяти выглядит так( с выравниванием по 1):
a - один байт b - два байта идут последовательно
а с выравниванием 2:
a - два байта b - два байта

как смог -- так объяснил smile.gif


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cardinal
Дата 3.6.2004, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Аааа, вспомнил smile.gif. Есть такая параша как pragma. Напиши так, как в примере ниже и будет все выравниваться по 1.
Код
#pragma pack (push)
#pragma pack (1)

typedef struct tagPALETTE { // rgbq
   BYTE    rgbBlue;
   BYTE    rgbGreen;
   BYTE    rgbRed;
   BYTE    rgbReserved;
} PALETTE;
 
typedef struct tagBMPFILEHEADER { // bmfh
   WORD    bfType;
   DWORD   bfSize;
   WORD    bfReserved1;
   WORD    bfReserved2;
   DWORD   bfOffBits;
} BMPFILEHEADER;

typedef struct tagBMPINFOHEADER{ // bmih
   DWORD  biSize;
   int    biWidth;
   int    biHeight;
   WORD   biPlanes;
   WORD   biBitCount;
   DWORD  biCompression;
   DWORD  biSizeImage;
   int    biXPelsPerMeter;
   int    biYPelsPerMeter;
   DWORD  biClrUsed;
   DWORD  biClrImportant;
} BMPINFOHEADER;

#pragma pack (pop)



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

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



дык это не есть правильное решение т.к. нужно править или заголовок от MS или писать свой


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cardinal
Дата 4.6.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Цитата
нужно править или заголовок от MS или писать свой

И это будет правильней?

Хотелось бы что-нибудь от других услышать по этому поводу, а вообще мне кажется что ты _hunter из мухи слона делаешь. Правильное или неправильное решение - работает ведь, что еще надо?


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

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


Опытный
**


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

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



к слову о выравнивании. вот что пишет ms:

Цитата

When you use #pragma pack(n), where n is 1, 2, 4, 8, or 16, each structure member after the first is stored on the smaller member type or n-byte boundaries.


то есть pragma pack(4) влияет только на поля структуры более 4 байт.
соответственно, все должно собираться и с заголовком от ms


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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



кто ж спорит smile.gif
только такой код:
Код
#include <pshpack2.h>
typedef struct tagBITMAPFILEHEADER {
       WORD    bfType;
       DWORD   bfSize;
       WORD    bfReserved1;
       WORD    bfReserved2;
       DWORD   bfOffBits;
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;
#include <poppack.h>

ровняется по DWORD' y sad.gif
( почем -- не знаю )



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
cardinal
Дата 5.6.2004, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


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

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



Еще раз даю тебе кусок работающей проги.
Код
#pragma pack (push)
#pragma pack (1)

typedef struct tagPALETTE { // rgbq
  BYTE    rgbBlue;
  BYTE    rgbGreen;
  BYTE    rgbRed;
  BYTE    rgbReserved;
} PALETTE;

typedef struct tagBMPFILEHEADER { // bmfh
  WORD    bfType;
  DWORD   bfSize;
  WORD    bfReserved1;
  WORD    bfReserved2;
  DWORD   bfOffBits;
} BMPFILEHEADER;

typedef struct tagBMPINFOHEADER{ // bmih
  DWORD  biSize;
  int    biWidth;
  int    biHeight;
  WORD   biPlanes;
  WORD   biBitCount;
  DWORD  biCompression;
  DWORD  biSizeImage;
  int    biXPelsPerMeter;
  int    biYPelsPerMeter;
  DWORD  biClrUsed;
  DWORD  biClrImportant;
} BMPINFOHEADER;

#pragma pack (pop)

У тебя это не работает или ты такой вариант не хочешь потому, что он "неправильный"? Если "неправильный" то объясни почему.


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

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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



да я так и делаю ( просто других путей пока не вижу ), но считаю его неправильным ( скорее некрасивым smile.gif ).
Почему? Т.к. нужно писать свои структуры вместо существующих ( Не плодите сущностей сверх
меры ). Это что-то типа INT да BOOL получается smile.gif


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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