/** * Deconvolve RGB array with one set of stain vectors, and reconvolve with another. * This supports in-place operation, i.e. buf and bufOutput can be the same array. * Otherwise, if bufOutput == null, a new output array will be created. * * @param buf * @param stainsInput * @param stainsOutput * @param discardResidual * @param bufOutput * @return */ public static int[] colorDeconvolveReconvolveRGBArray(int[] buf, ColorDeconvolutionStains stainsInput, ColorDeconvolutionStains stainsOutput, boolean discardResidual, int[] bufOutput) { return colorDeconvolveReconvolveRGBArray(buf, stainsInput, stainsOutput, discardResidual, bufOutput, 1f, 0f); }
@Override public int getRGB(BufferedImage img, int x, int y, boolean useColorLUT) { int[] arr = new int[]{img.getRGB(x, y)}; return ColorDeconvolution.colorDeconvolveReconvolveRGBArray(arr, imageDisplay.getImageData().getColorDeconvolutionStains(), stainsTarget, discardResidual, arr)[0]; }
@Override public int[] getRGB(BufferedImage img, int[] rgb, boolean useColorLUT) { int[] buffer = RGBDirectChannelInfo.getRGBIntBuffer(img); if (buffer == null) buffer = img.getRGB(0, 0, img.getWidth(), img.getHeight(), null, 0, img.getWidth()); return ColorDeconvolution.colorDeconvolveReconvolveRGBArray(buffer, imageDisplay.getImageData().getColorDeconvolutionStains(), stainsTarget, discardResidual, rgb, getScaleToByte(), -getOffset()); }