Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как сделать реверсию байта?


Автор: bougle 8.5.2006, 03:38
Не путать с инверсией байта. При реверсии происходит поворот байта относительно его середины. 
11001111 ->11110011
Я поискал в api и такой функции не нашел. Может плохо искал, на пришлось придумать самому.
Только вот подскажите как в массив типа byte[] записывать значения? Мне ошибка выдается что тип int нельзя записать в byte[].
Код

byte[] bu = new byte[30400];
        for(int i =0; i<30400;i++)
        {   int bubu = 0;
            for(int j=0;j<8;j++)
            {
                if(bu[i]/(Math.pow(2,(7-j)))>1)             
                {
                    bubu=bubu+(2^j);
                    bu[i]=bu[i]-2^(7-j);         //Ошибка
                }
            
            }
            bu[i]=bubu;                             //Ошибка

        }

Это был бы верный алгоритм если бы из байта доставалось число от 0 до 255, а не от -128 до 127.
Можете помочь?  

Автор: garm 8.5.2006, 06:38
Примерно так всё должно выглядеть:
Код

byte b = -126;        //Байт для реверсии
int iv = b & 0xFF;    //Он же, но без знака.
byte bv = 0;           //Результат
for(int i = 0; i < 8; i++)
{
    bv =  (byte)(bv | (((iv >> i) & 1) << (7 - i)));
}
 

Автор: bougle 9.5.2006, 04:36
Спасибо. Благодаря тебе я поискал, что такое битовые операторы и теперь буду ими пользоваться.
Вот что получилось в итоге:
Код

int level=250;
        int coef=4;
        int gu = 0;
        for(int i =0; i<30400;i++)
        {         
            int bubu = (bu[i])&0xFF;
            byte bv=0;             
            for(int j = 0; j < 8; j++)    
{    
    bv =  (byte)(bv | (((bubu >> j) &1) << (7-j)));    
}
            bubu=~bv&0xFF;
//Увеличим контраст
            if((gu=level-bubu)>0)
            {
                bubu=level-gu*coef;
            }
            bu[i]=(byte)(bubu);
        }

От датчика отпечатка пальца принимается растр, но немного не в нужном формате. Каждый байт реверсируется и инвертируется. Потом делаем небольшое увеличение контрастности. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)