1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.imaging.mylzw;
18
19 import java.io.FilterInputStream;
20 import java.io.IOException;
21
22 import org.apache.commons.imaging.common.Allocator;
23
24 public class BitsToByteInputStream extends FilterInputStream {
25 private final int desiredDepth;
26
27 public BitsToByteInputStream(final MyBitInputStream is, final int desiredDepth) {
28 super(is);
29 this.desiredDepth = desiredDepth;
30 }
31
32 @Override
33 public int read() throws IOException {
34 return readBits(8);
35 }
36
37 public int readBits(final int bitCount) throws IOException {
38 int i = ((MyBitInputStream) in).readBits(bitCount);
39 if (bitCount < desiredDepth) {
40 i <<= desiredDepth - bitCount;
41 } else if (bitCount > desiredDepth) {
42 i >>= bitCount - desiredDepth;
43 }
44
45 return i;
46 }
47
48 public int[] readBitsArray(final int sampleBits, final int length) throws IOException {
49 final int[] result = Allocator.intArray(length);
50 for (int i = 0; i < length; i++) {
51 result[i] = readBits(sampleBits);
52 }
53 return result;
54 }
55 }