sclass G22DataWrangler { settable BufferedImage inputImage; settable bool withDiagonals = true; settable int blurPixels = 1; // kilobytes per compressed image (pessimistic estimate // counting 2 bytes for each int) new TargetAndActual maxKB; new TargetAndActual coveredPixelsPercentage; new TargetAndActual detailLevel; settable IPosterizer posterizer = new SinglePixelPosterizer(4); BufferedImage blurredImage; int maxLines; BufferedImage posterizedImage; double detailDivisor() { ret areaRoot(inputImage); } stage "Blur" { blurredImage = blurBufferedImage(blurPixels, inputImage); } stage "Posterize" { posterizedImage = posterizeBufferedImage(blurredImage, posterizer); } stage "Lines" { maxLines = !detailLevel.hasTarget() ? Int.MAX_VALUE : iround(detailDivisor()*detailLevel.target()); } /* regions <- new FastRegions_Hi15Image posterized, withDiagonals diagonals, get ssis <- concatLists < for region in regions { new G22_RegionToSSIs_v2 region, withDiagonals diagonals, /*enableScaffolding true,*/ get } totalLines <- totalSSILines ssis // vectorize SSIs optimizedSSIs <- new VectorOptimizedSSIList ssis //print "optimizedSSIs" < l optimizedSSIs // take biggest ones, cut off at selected detail level optimizedSSIs <- VectorOptimizedSSIList alreadyOptimized < biggestSSIsFirst optimizedSSIs //print "optimizedSSIs" < l optimizedSSIs optimizedSSIs <- VectorOptimizedSSIList alreadyOptimized < takeFirstNSSILines maxLines optimizedSSIs //print "optimizedSSIs" < l optimizedSSIs // get stats keptLines <- totalSSILines optimizedSSIs vectorSSIs <- optimizedSSIs vectorSSIs ssis <- optimizedSSIs directSSIs totalSSIs <- l ssis directSSILines <- totalSSILines ssis vectorSSIPoints <- totalVectorSSIPoints vectorSSIs stats <- commaCombine list { resolution n2 totalLines "SSI line" n2_noPlural keptLines "kept" n2 optimizedSSIs "SSI" //n2 totalSSIs "Direct SSI" //n2 vectorSSIs "Vector SSI" n2 directSSILines "Direct SSI line" n2 vectorSSIPoints "Vector SSI point" } imageOut <- transparentImage resolution optimizedSSIs render imageOut infiller <- new ImageInfiller imageOut //infiller maxDepth 2 infiller unlimited infiller infillOpacity 254 //infiller eraseOriginalPixels imageOut <- infiller get imageOut <- renderImageOnBackground imageOut < Color black */ }