маленький фильтрик 8)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

маленький фильтрик 8)

Сообщение pronto » 09.07.2006 (Вс) 6:53

Уважаемые знатоки! Обнаружилась вот какая непонятка...

Создавая маленький фильтрик для обработки отсканированных изображений я обнаружил, что он срабатывает не на всех файлах. Файлы с глубиной серого цвета 8 bpp имеют разные размеры: от 2956х2312 до 2886х2272.
В таких bmp'шках первые 1078 байт содержат информацию о файле и растре. Тогда, если на каждый пиксел приходится по одному байту, то растр размером 2886х2272 должен занимать:
2886 х 2272 = 6 556 992 + 1078 = 6 558 070 байт, тогда как
его реальный (файловый) размер составляет
6 562 614 байта, те в расчете
не хватает или где-то не учитывается 4 544 байта. Можно предположить, что в конце каждой строчки растра дописываются по 2 байта, тогда 2 * 2272 = 4 544 и при таком раскладе расчетный и реальный размеры совпадают.

Но, если файл имеет размер, например, 2956х2312, то по тем же расчетам он должен занимать:
2956 х 2312 = 6 834 272 + 1078 = 6 835 350, что один в один совпадает с файловым размером.

Внимание вопрос!
Откуда, при одних и тех же условиях, берутся лишние байты в первом случае и что они могут означать?
O, sancta simplicitas!

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Re: маленький фильтрик 8)

Сообщение vvs_adm » 09.07.2006 (Вс) 11:01

pronto писал(а):Внимание вопрос!
Откуда, при одних и тех же условиях, берутся лишние байты в первом случае и что они могут означать?
Внимание ответ!
Каждая строка пикселов выравнивается до 4-х байт. В первом случае для выравнивания добавляется 2 байта, во втором случае добавляется 0 байт.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 13.07.2006 (Чт) 12:29

Большое спасибо за ответ!
Но это я предполагал и дополнительный код писать и переписывать неохота...
Могут ли добавляться 1-3 байта?
O, sancta simplicitas!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.07.2006 (Чт) 12:59

Могут.
Изображение

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 15.07.2006 (Сб) 6:41

Спасибо! буду ваять!
O, sancta simplicitas!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 108

    TopList