/*
* Copyright 2013, Morten Nobel-Joergensen
*
* License: The BSD 3-Clause License
* http://opensource.org/licenses/BSD-3-Clause
*/
package com.mortennobel.imagescaling;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.io.IOException;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.Before;
import javax.imageio.ImageIO;
public class TestThumbnailRescaleOp {
@Test
public void test1Sample(){
BufferedImage bi = new BufferedImage(3,3,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.black);
g2d.fillRect(0,0,3,3);
g2d.setColor(Color.red);
g2d.fillRect(1,1,1,1);
g2d.dispose();
ThumbnailRescaleOp rescaleOp = new ThumbnailRescaleOp(1,1);
rescaleOp.setSampling(ThumbnailRescaleOp.Sampling.S_1SAMPLE);
BufferedImage scaledImage = rescaleOp.filter(bi, null);
assertNotNull(scaledImage);
assertEquals(scaledImage.getRGB(0,0), Color.red.getRGB());
}
@Test
public void test1SampleLarge(){
BufferedImage bi = new BufferedImage(7,7,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.black);
g2d.fillRect(0,0,bi.getWidth(),bi.getHeight());
g2d.setColor(Color.red);
g2d.fillRect(1,1,1,1);
g2d.dispose();
ThumbnailRescaleOp rescaleOp = new ThumbnailRescaleOp(2,2);
rescaleOp.setSampling(ThumbnailRescaleOp.Sampling.S_1SAMPLE);
BufferedImage scaledImage = rescaleOp.filter(bi, null);
assertNotNull(scaledImage);
for (int x=0;x<scaledImage.getWidth();x++){
for (int y=0;y<scaledImage.getHeight();y++){
Color color = new Color(scaledImage.getRGB(x,y));
assertEquals(color.getBlue(),0);
assertEquals(color.getGreen(),0);
assertEquals(color.getRed(),x+y==0?255:0);
}
}
new Color(255,255,255);
}
@Test
public void test2x2RGSS(){
BufferedImage bi = new BufferedImage(4,4,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.black);
g2d.fillRect(0,0,bi.getWidth(),bi.getHeight());
g2d.setColor(Color.red);
g2d.fillRect(2,0,1,1);
g2d.dispose();
ThumbnailRescaleOp rescaleOp = new ThumbnailRescaleOp(1,1);
rescaleOp.setSampling(ThumbnailRescaleOp.Sampling.S_2X2_RGSS);
BufferedImage scaledImage = rescaleOp.filter(bi, null);
assertNotNull(scaledImage);
Color color = new Color(scaledImage.getRGB(0,0));
assertEquals(color.getBlue(),0);
assertEquals(color.getGreen(),0);
assertEquals(color.getRed(),255/4);
}
/*@Test
public void test8Rooks(){
BufferedImage bi = new BufferedImage(6,6,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.black);
g2d.fillRect(0,0,bi.getWidth(),bi.getHeight());
g2d.setColor(Color.red);
g2d.fillRect(2,0,1,1);
g2d.dispose();
ThumbnailRescaleOp rescaleOp = new ThumbnailRescaleOp(1,1);
rescaleOp.setSampling(ThumbnailRescaleOp.Sampling.S_8ROCKS);
BufferedImage scaledImage = rescaleOp.filter(bi, null);
assertNotNull(scaledImage);
Color color = new Color(scaledImage.getRGB(0,0));
assertEquals(color.getBlue(),0);
assertEquals(color.getGreen(),0);
assertEquals(color.getRed(),255/8);
}*/
static BufferedImage bufferedImage;
@Before
public void setup(){
if (bufferedImage==null){
try {
bufferedImage = ImageIO.read(getClass().getResourceAsStream("largeimage.jpg"));
System.out.println("Loaded image "+bufferedImage.getWidth()+"x"+bufferedImage.getHeight());
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
@Test
public void largeImageTestMultistep(){
// used for measure speed
MultiStepRescaleOp multiStepRescale = new MultiStepRescaleOp(50,50);
multiStepRescale.filter(bufferedImage, null);
}
@Test
public void largeThumpRescale(){
// used for measure speed
ThumbnailRescaleOp multiStepRescale = new ThumbnailRescaleOp(50,50);
BufferedImage bufferedImage2 = multiStepRescale.filter(bufferedImage, null);
}
@Test
public void mediumThumpRescale(){
BufferedImage bi = new BufferedImage(10,10,BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(bufferedImage, 0,0,10,10, Color.white, null);
g2d.dispose();
int destWidth = 7;
int destHeight = 8;
ThumbnailRescaleOp multiStepRescale = new ThumbnailRescaleOp(destWidth, destHeight);
BufferedImage bufferedImage2 = multiStepRescale.filter(bi, null);
assertEquals(bufferedImage2.getWidth(), destWidth);
assertEquals(bufferedImage2.getHeight(), destHeight);
}
}