| 215 | } |
| 216 | |
| 217 | void unpack(byte[] rawData, int rawOffset, int bpp, byte[] byteData, int byteOffset, int w) throws Exception { |
| 218 | int j = byteOffset; |
| 219 | int k = rawOffset; |
| 220 | byte mask; |
| 221 | int pixPerByte; |
| 222 | |
| 223 | switch (bpp) { |
| 224 | case 1: mask = (byte)0x01; pixPerByte = 8; break; |
| 225 | case 4: mask = (byte)0x0f; pixPerByte = 2; break; |
| 226 | case 8: mask = (byte)0xff; pixPerByte = 1; break; |
| 227 | default: |
| 228 | throw new Exception("Unsupported bits-per-pixel value: " + bpp); |
| 229 | } |
| 230 | |
| 231 | for (int i = 0;;) { |
| 232 | int shift = 8 - bpp; |
| 233 | for (int ii = 0; ii < pixPerByte; ii++) { |
| 234 | byte br = rawData[k]; |
| 235 | br >>= shift; |
| 236 | byteData[j] = (byte)(br & mask); |
| 237 | //System.out.println("Setting byteData[" + j + "]=" + Test.byteToHex(byteData[j])); |
| 238 | j++; |
| 239 | i++; |
| 240 | if (i == w) return; |
| 241 | shift -= bpp; |
| 242 | } |
| 243 | k++; |
| 244 | } |
| 245 | } |
| 246 | |
| 247 | void unpack24(byte[] rawData, int rawOffset, int[] intData, int intOffset, int w) { |
| 248 | int j = intOffset; |