Bmp-Comments
06.12.2007 - 18:17
24.02.2008 - 20:25
как это вы додумались до этого?
Jenyay 25.02.2008 - 19:23
До чего именно?
Хорош_гусь)) 26.02.2008 - 22:18
Big Endian - Small Endian
Надо ещё учесть то, что все числа лежат в формате Big Endian, т.е. байты местами переставлены! Я до этого долго доходил!
Сергей 11.07.2008 - 17:00
программы для открытия структуры файла BMP
Здравствуйте подскажите какие программы позволяют открывать структуру любого файла BMP (с просмотром кода каждого пикселя)?
Фосса 05.11.2008 - 12:15
Little Endian!
Таки данные представлены в формате Little Endian, то есть младшим байтом-вперёд }=
Den 08.01.2009 - 13:04
Так если это взято из MSDN, тогда почему другие графические редакторы не могут открыть файл в этом формате????????
Jenyay 08.01.2009 - 17:32
Какой файл?
amarant555 13.02.2009 - 15:04
пробовал на делфи работать с файлом созданым фотожоп >16 бит не воспринимает видимо там 5-5-5 вместо 5-6-5 (с которым умеет работать делфи) кому не трудно можете проверить прав я или нет.
amarant555 13.02.2009 - 15:07
поправка вернее делфи работает с файлом 16 бит но воспринимает формат как кастом, при этом не возможно использовать ряд функций.
PanzerDogg 22.02.2009 - 22:55
GOOD!!!
26.02.2009 - 09:43
10.05.2009 - 17:50
Мне очень понравилось содержание, но все же стоит сделать текст доступным не только для программистов, или студентов-программистов. Почему не сделать эту статью более выразительной и доступной
Jenyay 10.05.2009 - 17:57
Просто интересно, а кому может понадобиться описание формата файла кроме программистов?
DiezAver 16.05.2009 - 11:18
мне вот очень интересно, а в этом месте:
// Пишем мусор для выравнивания WriteFile (hOut, Palette, Width % 4, &RW, NULL); SetFilePointer (hIn, (3 * Width) % 4, NULL, FILE_CURRENT);
пишется мусор размером Width % 4. При размере картинки, скажем 255, Width % 4 будет = 3, но разве записать надо не на 1 байт?
Jenyay 16.05.2009 - 11:23
Нет, нужно писать не один байт, потому что один пиксель занимает три байта. Если бы картинка была 8-битовая, а не 24-битовой, то достаточно было бы одного байта.
DiezAver 19.05.2009 - 09:01
О, действительно, просто я как раз с 8-битовыми сейчас работаю
Влад 01.06.2009 - 19:08
Проблема с чтением палитры
Я создал 256-цветный рисунок в стандартном Paint'е. В програме загрузил рисунок и палитру, но цвета отображаются неправильно(нету оттенков красного). Так загружаю палитру:
for(int i=0; i<256; i++){ fin.get(color.blue); fin.get(color.green); fin.get(color.red); fin.get(reserved); setPaletteRegistr(i, &color); }
daim 31.07.2009 - 08:10
такой вот глупый вопросец: с 24 бит на пиксель понятно допустим белый - FF FF FF читаем каждый канал и записываем В свои байтные переменные а с 16 бит на пиксель как? тотже белый FF 7F FF? как то через маску....? и размер параграфа то же будьте добры, просто первый раз здесь услышал
Джей 13.11.2009 - 17:04
"...есть надписи на русском языке"
> "BitMaP - битовая карта, или, говоря по-русски, битовый массив" Вообще-то слово "массив" - французского происхождения (massif от massiz). Но это мелочи. Я тут чеек посторонний, просветите: што за язык чудной вы используете для программ своих написания? Уж не Си ли это?
Jenyay 13.11.2009 - 17:11
Джей
Да, Си, но тут не столько сам язык, сколько вызовы функций WinAPI, от самого языка не так много осталось :)
Джей 17.11.2009 - 10:51
Si, si...
Я щас пишу на C# (уж больно заказчик формы любит...). Какую среду разработки посоветуете?
Jenyay 17.11.2009 - 10:55
Visual C# Express, если не хочется денег на среду тратить.
Джей 17.11.2009 - 11:28
Ah, bien merci, merci bien...
Mille mercis... З.ы. source: "Распространенье наше по планете / Особенно заметно вдалеке. / В общественном парижском туалете / Есть надписи на русском языке" (В.С. Высоцкий)
Джей 17.11.2009 - 17:32
mille pardons
Je m'excuse de vous demander pardon... Вы в ЦОИз шарите? Если да, в чём именно?
Jenyay 30.11.2009 - 22:26
В ЦОИ скорее теоретически представляю что к чему. А вообще по работе я иногда занимаюсь обработкой несколько специфических изображений (радиоизображений).
Людмила 17.01.2010 - 18:44
Очень важная для меня, интересная информация. Большое спасибо. Удачи, здоровья.
murder 07.04.2010 - 13:52
16-битные изображения
По моим наблюдениям Photoshop не использует поле biClrUsed.
Алгоритм такой: Если поле biCompression равно BI_RGB то формат 5:5:5. Если же это поле содержит BI_BITFIELDS, то цвета нужно считывать согласно маскам bV5RedMask, bV5GreenMask, bV5BlueMask.
Кроме того BI_BITFIELDS в сочетании с масками позволяет менять расположение цветов (например RGB вместо стандартного BGR). Я проверял это на функции SetDIBitsToDevice - работает.
Domen0 25.05.2010 - 12:08
Огромное спасибо! Наконец-то нашел.
Винт 01.09.2010 - 18:27
маленькая поправочка для концовки ...
delete[] inBuf; delete[] outBuf;
25.09.2010 - 20:07
01.10.2010 - 18:14
)))) 21.12.2010 - 05:54
14.01.2011 - 20:55
здесь никто ни чего не знает
Ротва 18.01.2011 - 02:09
Амет
Написал собственную прогу по этой статье. Спасибо. Проверил все варианты, за исключением 5-5-5, 5-6-5. Если у кого-то есть изображения с таким форматом и БЕЗ сжатия, очень прошу выложить на http://pixs.ru/ и скинуть линк сюда! thx!
апт 12.03.2011 - 11:01
врт
ку
Duk Nukem 27.10.2011 - 20:43
Ошибка в программе
Ваша программа при компиляции выдаёт ошибку в строке:
hFile = CreateFile (fname, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
fname неправильного типа.Как исправить это?
Jenyay 29.10.2011 - 09:47
Попробовал сейчас скомпилировать исходник в Visual C++ 2008 Express, все скомпилировалось. А у Вас каком компилятор?
eugrita 27.12.2011 - 05:41
создание BMP
у меня ваша программа создала BMP-файл, но просмотр его оказался недоступен. Почему??? (Win XP)
eugrita 27.12.2011 - 05:43
cоздание BMP
При попытке открытия Paint говорит что недостаточно ресурсов для выполнения операции
Slavon G. 11.01.2012 - 02:26
re: создание BMP
eugrita, тяжело что-то сказать, не видя кода программы Jenyay, а вот тут ошибочка //Convert256To24() bfh.bfSize = bfh.bfOffBits + 3 * Width * Height + Height * (Width % 4);
Slavon G 11.01.2012 - 02:29
re: создание BMP
Поэтому в последний рисунок, размер файла записывается в заголовок неправильно.
PS: каптча любит шестерки
mao 12.08.2012 - 14:55
А сколько здесь байт в LONG? что-то я смотрю в редакторе одну бмп-картинку и похоже на то, что 4, но в чём тогда отличие от dword?
mao 12.08.2012 - 15:24
А, википедия популярно объясняет, что « Тип WORD должен иметь размер 16 бит, типы DWORD и LONG — 32 бита, тип LONG — знаковый, порядок байтов подразумевается little endian. »
Касательно этого два вопроса: 1) зачем знаковость в biWidth и biHeight? 2) little endian везде или только в long?
mitas 24.11.2012 - 15:01
вопросик.
Всем доброе время суток. Хочу сказать автору спасибо, все изложено очень наглядно и понятно. Есть только один вопрос. Он касается примера 1-го, а именно подсчет размера конечного файла. bfh.bfSize = bfh.bfOffBits + sizeof(color) * Width * Height + Вопрос к этой формуле.
Height * ((sizeof(color) * Width) % 4 это так называемая проверка на кратность.
bfh.bfOffBits - размер в байт sizeof(color) - размер в байт Width * Height - а тут размер в битах Нету ли здесь ошибки в подсчете ??? Предположим есть bmp картинка 256x256пик. С глубиной цвета 24бит. По факту ее размер 196662 байта или 1572864 бит. Проверяем: bfh.bfOffBits = 14 + 40 = 54 байт + sizeof(color) = 3 бита(24 байт) * Width * Height = 256 * 256 = 65636 бит Сложим по формуле: 1. (54 байт + (24бита + 65636 бит)) 2. (54 байт + 1572864 бит) пот и сам вопрос как ? 3. (= 1572918 бит \ 8 = 196614,75 байт) а должны получить (196662 байта) 4. Я так понимаю 54 байта нужно + к (1572864 бит / 8 = 196608 бита) = 196662 байта
h21 16.10.2013 - 11:20
Компилировал на GCC, язык C++ . Во-первых, нужно заменить названия типов данных: WORD - unsigned short DWORD - unsigned int LONG - int или long
Во-вторых, размер структуры в памяти зависит от настроек компилятора и от директив. Поля структуры выравниваются кратно своему размеру: 1-байтовые поля не выравниваются, 2-байтовые — выравниваются на чётные позиции, 4-байтовые — на позиции кратные четырём и т.д.. Таким образом, в памяти остаются пустые места между полями структуры, при этом, соответственно, она запишется в файл вместе с ними. Чтобы поля размещались без пропусков, следует указывать следующие директивы:
- pragma pack(push, 1)
// Объявление структур ...
- pragma pack(pop)
Структуры должны иметь следующие размеры: BITMAPFILEHEADER - 14 байтов BITMAPINFOHEADER - 40 байтов
h21 16.10.2013 - 11:38
В предыдущем сообщении, не пойму, откуда взялись единицы перед директивами, вместо # (октоторп).
- pragma pack(push, 1)
// Объявление структур ...
- pragma pack(pop)
Борис 31.12.2013 - 15:03
Пиксели
Подскажите , вот я записал сами байты изображения в массив , как перевести их в целые числа(для цвета) , 0 до 15 . Плиз?
Борис 31.12.2013 - 15:04
mas=(unsigned char *)malloc(sizeof(unsigned char)*(inf.biSizeImage));
fseek(fp, bmp.bfOffBits, SEEK_SET); fread(mas, inf.biSizeImage, 1, fp) Вот конкретно , а что дальше можно сделать? НА чистом СИ
I.D. 09.01.2014 - 15:52
Хорошая статья
Прохожий 27.01.2014 - 13:32
Представление чисел в памяти и регистрах
Хорошая статья. Числа в памяти записаны справа налево (т.е. о рег AX 2233h Число в памяти 3322h (после записи) рег EAX 22334455h Число в памяти 55443322h
Серж 25.05.2014 - 01:36
Мегаспасибо
Никак не мог понять, почему у меня не получается сохранить 8-битный массив с камеры размером 1625x1234 в бмп-файл. Хотя 1624x1234 сохраняется без проблем. Все заработало как только я добавил в файл дополнительно нули в количестве - как вы указали - "(3 * Width) % 4" (для 8 бит) Огромное Вам спасибо!
девочка, совершившая ошибку в своей жизни 27.10.2014 - 21:54
Помощь, мне нужна помощь, ребятки!
Я сохранила рисунок, который я очень долго и старательно рисовала в графическом редакторе-Paint. Так вот, этот рисунок имеет очень хорошую чёткость в Painte, но когда я его сохраняла, получается, что картинка не имеет такой же четкости, когда была рисунком. А совершила я ошибку в том, что сохранила рисунок в "256-цветный рисунок (*.bmp*;.did)" и сейчас он поменял цвета, а изначально он был у меня в формате *.png. Это очень плохо для меня. Прошу, помогите пожалуйста мне вернуть обратно цвет рисунку, который был раньше, и сделать так, чтобы при сохранении рисунка, картинка получалась такой же четкой, как и рисунок, если это возможно.
Jenyay 27.10.2014 - 22:37
Из испорченного рисунка получить качественный уже не получится, а в принципе Paint должен уметь сохранять png.
11.02.2015 - 15:33
поправьте комменты плиз
>bih.biBitCount =8;// 16 бит на пиксель
11.02.2015 - 15:37
можете пожалуйста подсказать с конвертированием 24-битного в 8-битный, а именно как посоветуете распределять цвета. вот у вас есть пример 8 битной с использования палитры, так, а вот есть у нас 3 байта, для кодирования R, G и B, вот как правильно преобразовать в индекс цвета в таблице...
Vlad K 02.03.2015 - 10:25
Обратная задача
У меня обратная задача. Нужно оцифровать график с картинки от BMP 8-бит от Paint(к примеру). Подскажите, с чего начать? Спасибо
ДмитрийК 12.02.2016 - 20:59
Автор, вы большой молодец, большое спасибо вам.
Georgy Sviridov 28.06.2019 - 17:20
Спасибо, быстро разобрался.
oss 14.09.2019 - 14:49
Спасибо большое за статью!
Иван Иванов 11.12.2019 - 10:53
Много полезна статия. Благодаря!
Виктор 01.03.2021 - 12:24
Тема
Параграф это 4 байта ? Если так, то формула расчета для добавление недостающих байтов в строку будет такой, для 24 битового формата: 4 - (Width*3 mod 4)
Виктор 01.03.2021 - 12:24
Тема
Параграф это 4 байта ? Если так, то формула расчета для добавление недостающих байтов в строку будет такой, для 24 битового формата: 4 - (Width*3 mod 4)
Виктор 01.03.2021 - 12:25
Тема
Параграф это 4 байта ? Если так, то формула расчета для добавление недостающих байтов в строку будет такой, для 24 битового формата: 4 - (Width*3 mod 4)