package eu.svjatoslav.imagesqueeze.codec; public class OperatingContext { Image image; byte[] yMap; byte[] uMap; byte[] vMap; ColorStats colorStats = new ColorStats(); public OperatingContext(){ } public void initialize(Image image, byte [] brightnessMap, byte [] colornessMap, byte [] colorMap){ this.image = image; this.yMap = brightnessMap; this.uMap = colornessMap; this.vMap = colorMap; colorStats.reset(); } public void measureNeighborEncode(int x, int y){ if ((y >= 0) && (y < image.metaData.height) && (x >= 0) && (x < image.metaData.width)){ int neighborIndex = y * image.metaData.width + x; colorStats.ySum = colorStats.ySum + ImageEncoder.byteToInt(yMap[neighborIndex]); colorStats.uSum = colorStats.uSum + ImageEncoder.byteToInt(uMap[neighborIndex]); colorStats.vSum = colorStats.vSum + ImageEncoder.byteToInt(vMap[neighborIndex]); colorStats.pixelCount++; } } public int getYRange(int index){ int brightness = ImageEncoder.byteToInt(yMap[index]); return Math.abs(brightness - colorStats.getAverageY()); } public int getURange(int index){ int colorness = ImageEncoder.byteToInt(uMap[index]); return Math.abs(colorness - colorStats.getAverageU()); } public int getVRange(int index){ int color = ImageEncoder.byteToInt(vMap[index]); return Math.abs(color - colorStats.getAverageV()); } }