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