From 5dd00ca113540bd4f6cfb334e81b3b9b42ba3eac Mon Sep 17 00:00:00 2001 From: lax1dude Date: Mon, 17 Jun 2024 19:03:58 -0700 Subject: [PATCH] make EBP encoder use less memory --- .../lax1dude/eaglercraft/bintools/EBPFileEncoder.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/lax1dude/eaglercraft/bintools/EBPFileEncoder.java b/src/main/java/net/lax1dude/eaglercraft/bintools/EBPFileEncoder.java index cca5772..9dc5396 100644 --- a/src/main/java/net/lax1dude/eaglercraft/bintools/EBPFileEncoder.java +++ b/src/main/java/net/lax1dude/eaglercraft/bintools/EBPFileEncoder.java @@ -5,8 +5,10 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.Map; import java.util.Set; import javax.imageio.ImageIO; @@ -28,8 +30,6 @@ import javax.imageio.ImageIO; */ public class EBPFileEncoder { - private static final int[] paletteHelper = new int[0xFFFFFF + 1]; - private static void setBit(int idx, boolean v, byte[] bytes) { int idx2 = idx >> 3; if(v) { @@ -107,14 +107,15 @@ public class EBPFileEncoder { fos.write(pixels[i] & 0xFF); } }else { + Map paletteHelper = new HashMap(); fos.write(1); // type is palette fos.write(colorPalette.size()); // write palette size Iterator paletteItr = colorPalette.iterator(); int paletteIdx = 0; - paletteHelper[0] = 0; + paletteHelper.put(0, 0); while(paletteItr.hasNext()) { int j = paletteItr.next().intValue(); - paletteHelper[j] = ++paletteIdx; + paletteHelper.put(j, ++paletteIdx); fos.write((j >> 16) & 0xFF); fos.write((j >> 8) & 0xFF); fos.write(j & 0xFF); @@ -128,7 +129,7 @@ public class EBPFileEncoder { byte[] completedBitSet = new byte[(totalBits & 7) == 0 ? (totalBits >> 3) : ((totalBits >> 3) + 1)]; int bsi = 0; for(int i = 0; i < pixels.length; ++i) { - int wr = paletteHelper[pixels[i]]; + int wr = paletteHelper.get(pixels[i]); for(int j = bpp - 1; j >= 0; --j) { setBit(bsi++, ((wr >> j) & 1) != 0, completedBitSet); }