package aliview.gui.pane;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.nio.ByteBuffer;
import java.util.Arrays;
import org.apache.log4j.Logger;
import aliview.color.ColorUtils;
public class ImageUtils {
private static final Logger logger = Logger.getLogger(ImageUtils.class);
public static void insertRGBArrayAt(int targetX, int targetY, RGBArray newPiece, RGBArray origPiece) throws Exception{
try{
//UnSafe unsafe = Unsafe.getUnsafe();
int offset = targetY * origPiece.getScanWidth() + targetX; // first pos in target array
int target;
// Outer loop is each scanline
int counter = 0;
for(int scanCount = 0; scanCount < newPiece.getHeight(); scanCount ++){
// Inner loop is each pixel per scan
// int posOrig = offset + scanCount * origPiece.getScanWidth();
// int posNewPiece = scanCount * newPiece.getScanWidth();
//System.arraycopy(origPiece.backend, posOrig, newPiece.backend, posNewPiece, newPiece.getScanWidth());
for(int n = 0; n < newPiece.getScanWidth(); n++){
int posOrig = offset + scanCount * origPiece.getScanWidth() + n;
int posNewPiece = scanCount * newPiece.getScanWidth() + n;
origPiece.backend[posOrig] = newPiece.backend[posNewPiece];
counter++;
}
}
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
/**
* Converts a given Image into a BufferedImage
*
* @param img The Image to be converted
* @return The converted BufferedImage
*/
public static BufferedImage toBufferedImage(Image img)
{
if (img instanceof BufferedImage)
{
return (BufferedImage) img;
}
// Create a buffered image with transparency
BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
// Draw the image on to the buffered image
Graphics2D bGr = bimage.createGraphics();
bGr.drawImage(img, 0, 0, null);
bGr.dispose();
// Return the buffered image
return bimage;
}
public static void darkerRGBArrayColumn(RGBArray clipRGB, int colPos) {
for(int posInArray = colPos; posInArray < clipRGB.getLength(); posInArray += clipRGB.getScanWidth()){
int colVal = clipRGB.getBackend()[posInArray];
clipRGB.getBackend()[posInArray] = ColorUtils.darkerRGB(colVal);
}
}
}