LINUX.ORG.RU

BMP: базовая технология run length encoding, вопросы

 


0

1

Добрый день!

Пожалуйста, посмотрите цитату. Я не понимаю, как получается результат. Я новичок, поэтому вопросы у меня соотвествующие (пишу эту оговорку пока в каждом сообщении). Сама картинка черно-белой матрицы не отображается, поэтмоу я ее воспроизвожу в RAW формате битов.

1) при ширине 17 пикселей, как получилось 16 байтов на каждую строку? 
в одном пикселе 1 байт (8 битов), тогда 16 байтов
2) не поняла, как из 16 байтов получилось 2 байта. Я вижу
что есть сочетание только 2х цветов, на каждый видимо по 8 бит, да?
3) и совсем не поняла последний результат:
        
        16 0
	16 0
	2 0 12 1 2 0 
The following is a description of the simplest lossless 
compression technique called run length encoding (RLE) that is 
used with good effect for bitmaps with only a few colours.
Consider the following small, 17 x 10 pixel, 8 bit image.
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
	0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
        0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
        0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
        0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
        0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
        0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0
        0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
If this was to be stored in RAW form it would need 16 bytes per
row for all 10 rows. However the first two rows are all the same
level so it is more efficient to simply save the number of same
colours in a run along with the run colour. The first two rows
instead of needing 16 bytes only need 2 bytes each.

In raw format the first three rows would be

	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
	0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0
Using run length encoding the first three rows would be
	16 0
	16 0
	2 0 12 1 2 0 

Спасибо!



Последнее исправление: Ducol (всего исправлений: 4)

пост выглядит чудовищно, не понимаю как отформатировать. когда печатала все было в колонках как положено (

Ducol
() автор топика
Ответ на: комментарий от Ducol

Воспользуйся тегом [code]..[/code]. Текст внутри него отображается моноширинным шрифтом и с сохранением пробельных символов.

intelfx ★★★★★
()
Ответ на: комментарий от Deleted

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

Ducol
() автор топика

Если внимательно посчитать, то там 16x10 изображение. Дальше говорится, что если мы будем сначала писать количество повторений цвета, а затем сам цвет, то можно уложиться в 2 байта: 16 - кол-во, затем 0 - цвет. Отсюда и две первые сжатые строки. Точно такой же принцип в следующей строке: 2 нуля, 12 единиц, еще 2 нуля.

Kiborg ★★★
()
Ответ на: комментарий от Kiborg

«Если внимательно посчитать, то там 16x10 изображение.»

нет нет, именно 17 х 10. возможно из-за моего переформатирования эта информация стала была не видна. извините

Ducol
() автор топика
Ответ на: комментарий от Kiborg

«Точно такой же принцип в следующей строке: 2 нуля, 12 единиц, еще 2 нуля.» теперь вижу. спасибо! выглядело совсем cryptic )

«то можно уложиться в 2 байта: 16 - кол-во, затем 0 - цвет» 2 байта получаются потому что дано 8 бит на пиксель, и тогда 16 «приходится на один пиксель» и 0 на другой, верно? Если да, то почему 16 рассматривается как единый знак, а не как два 1 и 6?

Ducol
() автор топика
Ответ на: комментарий от Ducol

В приведенном тобой примере 16 колонок. Длины в объяснении тоже 16, 16, 2+12+2=16. Очевидно, что цифра 17 это опечатка. В противном случае тебе придется предложить свой вариант.

anonymous
()
Ответ на: комментарий от Ducol

то почему 16 рассматривается как единый знак, а не как два 1 и 6?

Потому что в один байт (восемь бит) влезает любое целое число от 0 до 255 включительно.

i-rinat ★★★★★
()
Ответ на: комментарий от Ducol

Потому что байт может содержать от 0 до 255. Остальное каша.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.