Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2012, 23:42   #11
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Правда, если честно, понятия не имею что я сделал,
Подозреваю, выравнивание на 1 байт.
Цитата:
sizeof(bmpheader) возвращает 14.
Это хорошо.
Тогда можно приступать к чтению BITMAPINFOHEADER.
s-andriano вне форума Ответить с цитированием
Старый 27.05.2012, 23:54   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Ничего подобного, что на диске, что в памяти на архитектуре Intel всегда Little-Endian
Про хранение в памяти ни одного слова и не было сказано. Имелось в виду значение прочитанных данных
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.05.2012, 00:53   #13
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Подозреваю, выравнивание на 1 байт.
На MSDN прочитал немного на заморском про этот pack Если я правильно понял, а я на это надеюсь, то цифра в директиве #pragma pack(1) указывает какому числу должно быть кратно выравнивание. Допустимы значения 1,2,4,8 и 16.

P.S.
Спасибо всем за помощь, всё успешно считано и для теста я даже монохроматическую картинку 25х25 пикселей в консольку псевдографикой отрисовал


Только вот один прикол - изображение оказывается записано в файле вверх ногами, поэтому пришлось строки с конца читать. Так и должно быть?
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 28.05.2012, 07:47   #14
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Про хранение в памяти ни одного слова и не было сказано. Имелось в виду значение прочитанных данных
Про "значение" тоже не было сказано ни слова, даже при том, что нигде не было упомянуто, что подразумевается под "значением".
Зато было сказано буквально следующее:
Цитата:
слова меняются местами и внутри слов байты меняются местами
А это категорически не соответствует действительности.
s-andriano вне форума Ответить с цитированием
Старый 28.05.2012, 07:54   #15
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Только вот один прикол - изображение оказывается записано в файле вверх ногами, поэтому пришлось строки с конца читать. Так и должно быть?
Неужели в описании формата этого не было?
Да, ось X в файле BMP направлена слева направо, а ось Y, как и должно быть, если верить школьному курсу математики, снизу вверх. Тогда как в WinAPI (а также в DOS) принято, чтобы ось Y смотрела вниз.
Можно лишь отметить, что в OpenGL ось Y также смотрит вверх.
Так что какой режим считать "перевернутым" - вопрос неоднозначный.
Скорее всего, перевернуто именно в DOS/Windows.

Могу еще порекомендовать не читать строки из файла в обратном порядке, а, наоборот, читать последовательно, а в память записывать, начиная с последней. При условии, конечно, что программе они нужны именно в таком "перевернутом" виде.
s-andriano вне форума Ответить с цитированием
Старый 28.05.2012, 09:50   #16
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Могу еще порекомендовать не читать строки из файла в обратном порядке, а, наоборот, читать последовательно, а в память записывать, начиная с последней. При условии, конечно, что программе они нужны именно в таком "перевернутом" виде.
Если честно, программе вообще по барабану, как они там расположены. Мне надо к изображению применить RLE шифрование.
Остался только один нерешенный вопрос: в структуре BITMAPFILEHEADER поле bfOffBits показывает 62. т.е. само изображение начинается с 63-го байта. Хедер = 14 байт, Инфо = 40 байт, итого 54 байта. Что записано в оставшихся 8-ми байтах?

Ну и сходу вопрос. Когда я сжимаю RLE-сжиманием, изображение потом должно читаться? Или читабельность вернется только после "расжатия" ?
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 28.05.2012 в 10:06.
MooNDeaR вне форума Ответить с цитированием
Старый 28.05.2012, 11:17   #17
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Что записано в оставшихся 8-ми байтах?
В оставшихся 8-ми байтах содержится массив RGBQUAD-ов, состоящий из двух элементов:

Если в BITMAPINFOHEADER поле biBitCount равно 1, то:

Цитата:
The bitmap is monochrome, and the bmiColors member contains two entries. Each bit in the bitmap array represents a pixel. If the bit is clear, the pixel is displayed with the color of the first entry in the bmiColors table; if the bit is set, the pixel has the color of the second entry in the table.
Т.е. чисто теоретически, да и собственно и практически вы можете сделать не чёрно-белую картинку, а красно-зелёную. Но при этом она всё равно будет монохромной.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 28.05.2012, 18:55   #18
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Хедер = 14 байт, Инфо = 40 байт, итого 54 байта. Что записано в оставшихся 8-ми байтах?
Согласно документации там располагается палитра.
Цитата:
Ну и сходу вопрос. Когда я сжимаю RLE-сжиманием, изображение потом должно читаться? Или читабельность вернется только после "расжатия" ?
Сложный вопрос.
Как-то на практике принято применять несжатые BMP. Серьезные программы типа графических редакторов, конвертеров и вьюверов обычно понимают и сжатый. Но часть программ умеет работать только с несжатыми BMP.
s-andriano вне форума Ответить с цитированием
Старый 29.05.2012, 11:39   #19
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Сложный вопрос.
Как-то на практике принято применять несжатые BMP. Серьезные программы типа графических редакторов, конвертеров и вьюверов обычно понимают и сжатый. Но часть программ умеет работать только с несжатыми BMP.
А как мне сообщить сторонней программе о том, что я сжал монохроматический файл? Записать что-то в Инфо структуру? Там вроде есть поле о использовании RLE сжатия, по поводу 4-х и 8-ми битных изображений По сути, мне фиолетово, эт просто лабораторная и если это очень гемморойно, то я потом разберусь
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 29.05.2012, 13:38   #20
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Да, в заголовке есть поле, в которое помещается идентификатор метода сжатия.
0 - несжатый.
Но если собираетесь сжимать, следует точно придерживаться одного из допустимых для BMP алгоритмов. И в заголовке проставить идентификатор именно этого алгоритма.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Натолкните на алгоритм или "Ночной город своими руками" Karp_13 Общие вопросы C/C++ 18 12.03.2012 01:05
чтение и отображение из ".txt" файла в dataGridView Leva_89 C# (си шарп) 0 23.03.2011 23:23
Чтение из ZIP-файла "на лету" (и ещё BASS/BASSMOD) Wanderer_r Мультимедиа в Delphi 3 20.03.2010 21:14
Считывание строк из файла. перемещение по строкам "веред"-"назад" Larkin. Помощь студентам 2 15.06.2009 17:58
"Hide Folder" своими руками (Delphi) Air Помощь студентам 3 13.11.2008 03:38