package readers; import java.io.IOException; import java.io.InputStreamReader; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.awt.Color; public abstract class Reader{ int score; int rank; int[] notes = new int[7]; int difficulty; String title; int pct; int maxcombo; String other; List readRegions = new ArrayList<>(); final int TRANSPARENT = new Color(0,0,0,0).getRGB(); String readAllBoxes(Path img) { try { Process p = Runtime.getRuntime().exec(new String[]{"python3","runocr.py","ja",img.toAbsolutePath().toString()}); while (p.isAlive()); InputStreamReader result = new InputStreamReader(p.getInputStream()); StringBuilder sb = new StringBuilder(); while (result.ready()) { sb.append((char)result.read()); } result.close(); sb.append("\n"); p = Runtime.getRuntime().exec(new String[]{"python3","runocr.py","en",img.toAbsolutePath().toString()}); while (p.isAlive()); result = new InputStreamReader(p.getInputStream()); while (result.ready()) { sb.append((char)result.read()); } return sb.toString(); } catch (IOException e) { e.printStackTrace(); } return ""; } abstract String interpretOutput(String[] jp_data,String[] en_data); void trimAllData(String[] data) { StringBuilder sb = new StringBuilder(); for (int i=0;i=0&&newY>=0&&newX<=width&&newY<=arr.length/width) { Color col = new Color(arr[i+x+y*width]); if (!col.equals(Color.MAGENTA)&&SEEKCOLOR.colorInRange(col)) { farthestRight=seek(arr,i+x+y*width,SEEKCOLOR,FINALCOLOR,width,farthestRight); } } } } return X>farthestRight?X:farthestRight; } void seekThreshold(int[]arr,int i,int threshold,Color FINALCOLOR,int width) { seekThreshold(arr,i,threshold,FINALCOLOR,width,0); } int seekThreshold(int[]arr,int i,int threshold,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++) { int newX=(i+x+y*width)%width; int newY=(i+x+y*width)/width; if (newX>=0&&newY>=0&&newX<=width&&newY<=arr.length/width) { Color col = new Color(arr[i+x+y*width]); if (!col.equals(Color.MAGENTA)&&colorIsBright(col, threshold)) { farthestRight=seekThreshold(arr,i+x+y*width,threshold,FINALCOLOR,width,farthestRight); } } } } return X>farthestRight?X:farthestRight; } void process(int[]arr,int width,int a,int b,int c,int d,int e,int f,int g,int h,int ii,int j,int k,int l) { final ColorRange TARGETCOLOR = new ColorRange(a,b,c,d,e,f); final ColorRange SEEKINGCOLOR = new ColorRange(g,h,ii,j,k,l); final Color FINALCOLOR = Color.MAGENTA; for (int i=0;ibrightnessThreshold; } void processBrightness(int[]arr,int width,int threshold1,int threshold2) { final Color FINALCOLOR = Color.MAGENTA; for (int i=0;i='0'&&s.charAt(j)<='9') { numb*=10; numb+=s.charAt(j)-'0'; } } } return numb; } @Override public String toString() { return "Reader [difficulty=" + difficulty + ", maxcombo=" + maxcombo + ", notes=" + Arrays.toString(notes) + ", other=" + other + ", pct=" + pct + ", rank=" + rank + ", score=" + score + ", title=" + title + "]"; } }