2013-11-07 2 views
1

Я воспользовался доступными вопросами о переполнении стека, но я не нашел никакого отношения к моей проблеме. У меня есть изображение, которое содержит двоичные данные, каждый пиксель, к которому я обращаюсь в качестве байта, но в качестве моего бинарного изображения я могу освободить память, используя битную упаковку. Но я не знаю, как это сделать, и я не нахожу хороших источников, чтобы учиться.Бит Упаковка в C

Может ли кто-нибудь помочь мне?

+2

В каком формате находится изображение? Какую библиотеку вы используете для чтения изображения в память? Не могли бы вы опубликовать код, который вы получили до сих пор? – Constantin

+0

Спасибо за немедленный ответ. Я использую opencv-библиотеку для чтения изображения. Это формат JPEG. – shreya

+2

Что вы подразумеваете под этим «я могу освободить память, используя битную упаковку»? – Artur

ответ

3

Не знаете, какие ссылки вы нашли ... Или какова настоящая проблема.

Вы можете сделать что-то вроде этого:

typedef enum { ZERO, ONE, TWO, THREE } pix2; 

uint8_t pack_values(pix2 p1, pix2 p2, pix2 p3, pix4 p4) 
{ 
    return (p1 << 6) | (p2 << 4) | (p3 << 2) | p4; 
} 

выше будет «пакет» четыре два-битных значений в один 8-битное значение. Назначение таких битов (извините мои графические навыки ASCII):

 +-+-+-+-+-+-+-+-+ 
bit: |7|6|5|4|3|2|1|0| 
     +-+-+-+-+-+-+-+-+ 
value: | p1| p2| p3| p4| 
     +---+---+---+---+