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


Автор: 4epT 7.11.2010, 13:48
Добры день! Задача в том что бы вшить информацию (текст в картинку), для алгоритма LSB нужно работать с битами. Использую класс BitSet. Нашел функци которые преобразуют из массива byte  в BitSet:

Код

    public static BitSet fromByteArray(byte[] bytes)
    {
        BitSet bits = new BitSet();
        for (int i = 0; i < bytes.length * 8; i++)
        {
            if ((bytes[bytes.length - i / 8 - 1] & (1 << (i % 8))) > 0)
            {
                bits.set(i);
            }
        }
        return bits;
    }


Вообщем получаю пиксель, из него делаю массив байтов (3 байта, тоесть цвета красный зеленый и синий), и преобразовываю этот массив в BitSet. По идеи размер BitSet должен быть равен 24 (8 * 3), но через отладчик выходит 64 .. откуда не понятно ( вот собственно код:

Код

    byte[] pixel = _convertRGBtoBytes( img.getData()[i][j] );
    BitSet tmp = BitUtil.fromByteArray(pixel);

    private static byte[] _convertRGBtoBytes(RGB p)
    {
        byte r = (byte) p.getRed();
        byte g = (byte) p.getGreen();
        byte b = (byte) p.getBlue();

        byte[] bytes = { r , g , b };

        return bytes;
    }


кто с таким сталкивался ? или есть еще какие нибудь спсобы работы с битами?

Автор: nc30 11.11.2010, 16:48
Видимо, дело не в коде, т. к.
Код

System.out.println(new BitSet().size());

выдает: 64.

UPD:
Небольшой опыт (известным научным методом =)
Код

        int[] arr = {0, 1, 24, 64, 65, 128, 129, 193, 256, 257};

        for (int i: arr)
            System.out.println("Size of BitSet(" + i +"): " + new BitSet(i).size());


дал следующие результаты:
Код

Size of BitSet(0): 0
Size of BitSet(1): 64
Size of BitSet(24): 64
Size of BitSet(64): 64
Size of BitSet(65): 128
Size of BitSet(128): 128
Size of BitSet(129): 192
Size of BitSet(193): 256
Size of BitSet(256): 256
Size of BitSet(257): 320


Выводы, полагаю, очевидны smile

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