177 int w = tiles.length;
178 int h = tiles[0].length;
181 int [] masks =
new int [] {
191 byte [] input =
new byte [(int) Math.ceil(total / 4)];
192 for (
int i = 0; i < total; i++) {
195 int val = tiles[x][y];
196 int mask = masks[bitPair];
200 curr = curr | ((val << (8 - (bitPair + 1) * 2)) & mask);
206 input[i/4] = ((byte) curr);
211 input[(total - 1) / 8] = ((
byte) curr);
247 Deflater compresser =
new Deflater();
248 compresser.setInput(input);
251 StringBuilder result =
new StringBuilder();
252 byte [] temp =
new byte[100];
254 while (!compresser.finished()) {
255 int read = compresser.deflate(temp);
261 return result.toString();
323 public static void main(String[] args)
throws DataFormatException {
325 int [][] tiles =
new int[][] {
347 System.out.println(
"Original:");
348 for (
int i = 0; i < tiles.length; i++) {
349 for (
int j = 0; j < tiles[0].length; j++) {
350 System.out.print(String.format(
"% 2d,", tiles[i][j]));
352 System.out.println();
356 System.out.println(result);
358 int [][] tilesBack =
decodeTiles(result, tiles.length, tiles[0].length);
360 System.out.println(
"Decoded:");
361 for (
int i = 0; i < tilesBack.length; i++) {
362 for (
int j = 0; j < tilesBack[0].length; j++) {
363 System.out.print(String.format(
"% 2d,", tilesBack[i][j]));
365 System.out.println();
368 boolean equals =
true;
369 for (
int i = 0; i < tiles.length; i++) {
370 for (
int j = 0; j < tiles[0].length; j++) {
371 if (tiles[i][j] != tilesBack[i][j]) {
377 System.out.println(
"Equal: " + equals);