diff --git a/ArcadeReader.java b/ArcadeReader.java index 72bce31..5a4da94 100644 --- a/ArcadeReader.java +++ b/ArcadeReader.java @@ -1,6 +1,6 @@ import java.nio.file.Path; -import readers.SoundVoltexReader; +import readers.PopnReader; public class ArcadeReader { /* @@ -55,6 +55,6 @@ public class ArcadeReader { * */ public static void retrieveData(Path img) { - new SoundVoltexReader().interpretBoxes(img); + new PopnReader().interpretBoxes(img); } } diff --git a/readers/PopnReader.java b/readers/PopnReader.java new file mode 100644 index 0000000..99ad991 --- /dev/null +++ b/readers/PopnReader.java @@ -0,0 +1,155 @@ +package readers; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +import javax.imageio.ImageIO; + +public class PopnReader extends Reader{ + final static int REGION_PADDING = 32; + List extraRegions = new ArrayList<>(); + static int lastJump=0; + final int TRANSPARENT = new Color(0,0,0,0).getRGB(); + public PopnReader(){ + readRegions.add(new Box(941,609,275,54)); //score[0] + readRegions.add(new Box(1060,684,157,40)); //cool[1] + readRegions.add(new Box(1060,724,157,39)); //great[2] + readRegions.add(new Box(1060,761,157,40)); //good[3] + readRegions.add(new Box(1060,800,157,40)); //bad[4] + readRegions.add(new Box(1060,858,157,42)); //combo[5] + readRegions.add(new Box(970,288,271,50)); //diff[6] + readRegions.add(new Box(689,345,547,128)); //song[7] + readRegions.add(new Box(502,23,314,288)); //rating[8] + readRegions.add(new Box(692,525,532,16)); //lifebar[9] + + extraRegions.add(new Box(699,616,179,44)); //score text[0] + extraRegions.add(new Box(712,680,164,40)); //cool text[1] + extraRegions.add(new Box(712,721,168,38)); //great text[2] + extraRegions.add(new Box(712,759,150,40)); //good text[3] + extraRegions.add(new Box(712,800,101,38)); //bad text[4] + extraRegions.add(new Box(708,861,170,39)); //combo text[5] + } + + void seek(int[]arr,int i,ColorRange SEEKCOLOR,Color FINALCOLOR,int width) { + seek(arr,i,SEEKCOLOR,FINALCOLOR,width,0); + } + + int seek(int[]arr,int i,ColorRange SEEKCOLOR,Color FINALCOLOR,int width,int farthestRight) { + arr[i]=FINALCOLOR.getRGB(); + int X = i%width; + for (int x=-1;x<=1;x++) { + for (int y=-1;y<=1;y++) { + if (SEEKCOLOR.colorInRange(new Color(arr[i+x+y*width]))) { + farthestRight=seek(arr,i+x+y*width,SEEKCOLOR,FINALCOLOR,width,farthestRight); + } + } + } + return X>farthestRight?X:farthestRight; + } + + void ColorFilter(int[] arr,int region,int width) { + switch (region) { + case 999:{ + final ColorRange TARGETCOLOR = new ColorRange(240,255,240,255,240,255); + final ColorRange SEEKINGCOLOR = new ColorRange(100,255,100,255,100,255); + final Color FINALCOLOR = Color.MAGENTA; + for (int i=0;imaxWidth) { + maxWidth=readRegions.get(i).w; + } + } + try { + BufferedImage originalImg = ImageIO.read(img.toFile()); + BufferedImage cutImg = new BufferedImage(maxWidth,regionHeights,BufferedImage.TYPE_INT_ARGB); + Graphics2D g = cutImg.createGraphics(); + int currentHeight=0; + for (int i=0;irightMost) { + rightMost=j%extraRegions.get(i).w; + } + } + //cutImg.setRGB(rightMost-leftMost,currentHeight,readRegions.get(i).w,readRegions.get(i).h,arr,0,readRegions.get(i).w); + cutImg.setRGB(0,currentHeight,extraRegions.get(i).w,extraRegions.get(i).h,arr2,0,extraRegions.get(i).w); + final int PADDING = 4; + for (int x=leftMost;x data; try {