diff --git a/ArcadeReader.java b/ArcadeReader.java index cfe767c..4a767c4 100644 --- a/ArcadeReader.java +++ b/ArcadeReader.java @@ -1,10 +1,17 @@ +import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.awt.Color; import java.util.regex.Pattern; + +import javax.imageio.ImageIO; + +import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class ArcadeReader { @@ -63,6 +70,22 @@ public class ArcadeReader { new LoveLiveReader().interpretBoxes(img); } } +class ColorRange{ + int r_h,r_l; + int g_h,g_l; + int b_h,b_l; + ColorRange(int r_l,int r_h,int g_l,int g_h,int b_l,int b_h) { + this.r_l=r_l; + this.r_h=r_h; + this.g_l=g_l; + this.g_h=g_h; + this.b_l=b_l; + this.b_h=b_h; + } + boolean colorInRange(Color col) { + return col.getRed()>=r_l&&col.getRed()<=r_h&&col.getGreen()>=g_l&&col.getGreen()<=g_h&&col.getBlue()>=b_l&&col.getBlue()<=b_h; + } +} class Box{ int x,y,w,h; boolean ja_required; @@ -78,33 +101,99 @@ class Box{ } } class LoveLiveReader extends Reader{ + final static int REGION_PADDING = 32; LoveLiveReader(){ - readRegions.add(new Box(10,10,24,24)); //score[0] - readRegions.add(new Box(10,40,24,24)); //rank[1] - readRegions.add(new Box(10,70,24,24)); //notes[2] - readRegions.add(new Box(10,70,24,24)); //notes[3] - readRegions.add(new Box(10,70,24,24)); //notes[4] - readRegions.add(new Box(10,70,24,24)); //notes[5] - readRegions.add(new Box(10,70,24,24)); //notes[6] - readRegions.add(new Box(10,70,24,24)); //notes[7] - readRegions.add(new Box(10,70,24,24)); //notes[8] - readRegions.add(new Box(10,70,24,24)); //difficulty[9] - readRegions.add(new Box(10,70,24,24)); //title[10] - readRegions.add(new Box(10,70,24,24)); //pct[11] - readRegions.add(new Box(10,70,24,24)); //maxcombo[12] - readRegions.add(new Box(10,70,24,24)); //other...[13] + readRegions.add(new Box(713,401,232,50)); //score[0] + readRegions.add(new Box(613,290,65,36)); //rank[1] + readRegions.add(new Box(509,604,190,54)); //notes[2] + readRegions.add(new Box(509,680,190,54)); //notes[3] + readRegions.add(new Box(509,760,190,54)); //notes[4] + readRegions.add(new Box(509,840,190,54)); //notes[5] + readRegions.add(new Box(509,920,190,54)); //notes[6] + readRegions.add(new Box(26,374,265,36)); //difficulty[7] + readRegions.add(new Box(277,165,572,40)); //title[8] + readRegions.add(new Box(716,502,226,45)); //pct[9] + readRegions.add(new Box(782,452,158,50)); //maxcombo[10] + } + + void seek(int[]arr,int i,ColorRange SEEKCOLOR,Color FINALCOLOR,int width) { + arr[i]=FINALCOLOR.getRGB(); + for (int x=-1;x<=1;x++) { + for (int y=-1;y<=1;y++) { + if (SEEKCOLOR.colorInRange(new Color(arr[i+x+y*width]))) { + seek(arr,i+x+y*width,SEEKCOLOR,FINALCOLOR,width); + } + } + } } + + void ColorFilter(int[] arr,int region,int width) { + final int TRANSPARENT = new Color(0,0,0,0).getRGB(); + switch (region) { + case 0:{ + final ColorRange TARGETCOLOR = new ColorRange(240,255,130,150,0,10); + final ColorRange SEEKINGCOLOR = new ColorRange(140,255,110,255,0,200); + 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;i data; try {