/* * Copyright (C) 2015 Patryk Strach * * This file is part of Virtual Slide Viewer. * * Virtual Slide Viewer is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software Foundation, * either version 3 of the License, or (at your option) any later version. * * Virtual Slide Viewer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with Virtual Slide Viewer. * If not, see <http://www.gnu.org/licenses/>. */ package virtualslideviewer.util; import java.awt.Dimension; public class PixelDataUtil { /** * Swaps every R channel with B channel for every pixel in passed array thus converting beetwen RGB and BGR. * * @param pixelArray Pixel array which channels will be swapped. */ public static void swapRgbColorComponents(byte[] pixelArray) { if(pixelArray == null) throw new IllegalArgumentException("pixelArray cannot be null."); for(int i = 0; i < pixelArray.length ;i += 3) { byte temp = pixelArray[i]; pixelArray[i] = pixelArray[i+2]; pixelArray[i+2] = temp; } } /** * Converts pixels in src buffer from planar format to an interleaved one, storing the result in dst. */ public static void convertPlanarToInterleaved(byte[] src, byte[] dst, Dimension imageSize, int channelCount) { if(src == null) throw new IllegalArgumentException("src cannot be null."); if(dst == null) throw new IllegalArgumentException("dst cannot be null."); if(imageSize == null) throw new IllegalArgumentException("imageSize cannot be null."); if(channelCount <= 0) throw new IllegalArgumentException("channelCount must be positive."); int channelLength = imageSize.width * imageSize.height; for(int pixel = 0; pixel < channelLength ;++pixel) { for(int channel = 0; channel < channelCount; channel++) { dst[pixel * channelCount + channel] = src[pixel + channel * channelLength]; } } } }