You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.5 KiB
56 lines
1.5 KiB
package com.jotuntech.sketcher.common;
|
|
|
|
import java.awt.Point;
|
|
import java.util.HashMap;
|
|
import java.util.Iterator;
|
|
import java.util.Map.Entry;
|
|
|
|
public class BitmapUndoData extends HashMap<Point, BitmapTileDiff> implements UndoData {
|
|
protected Iterator<Entry<Point, BitmapTileDiff>> tileIterator = null;
|
|
protected static DiffPacker packer;
|
|
protected static DiffUnpacker unpacker;
|
|
|
|
public void reset() {
|
|
tileIterator = null;
|
|
}
|
|
|
|
public byte[] encode() {
|
|
if(tileIterator == null) {
|
|
tileIterator = entrySet().iterator();
|
|
}
|
|
|
|
if(tileIterator.hasNext()) {
|
|
Entry<Point, BitmapTileDiff> e = tileIterator.next();
|
|
Point p = e.getKey();
|
|
BitmapTileDiff btd = e.getValue();
|
|
byte[] encoded = new byte[BitmapTile.SIZE * BitmapTile.SIZE * 8 + 2];
|
|
int offset = 0;
|
|
encoded[offset++] = (byte) p.x;
|
|
encoded[offset++] = (byte) p.y;
|
|
|
|
if(packer == null) {
|
|
packer = new DiffPacker();
|
|
}
|
|
|
|
packer.pack(btd.diffAlpha, btd.diffRed, btd.diffGreen, btd.diffBlue, encoded, offset, encoded.length - offset);
|
|
|
|
return encoded;
|
|
} else {
|
|
tileIterator = null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public void decode(byte[] in) {
|
|
int offset = 0;
|
|
int x = 0xFF & in[offset++];
|
|
int y = 0xFF & in[offset++];
|
|
Point p = new Point(x, y);
|
|
BitmapTileDiff btd = new BitmapTileDiff();
|
|
if(unpacker == null) {
|
|
unpacker = new DiffUnpacker();
|
|
}
|
|
unpacker.unpack(in, offset, in.length - offset, btd.diffAlpha, btd.diffRed, btd.diffGreen, btd.diffBlue);
|
|
put(p, btd);
|
|
}
|
|
}
|
|
|