2018-07-26 12:11:49 +00:00
|
|
|
package com.company;
|
|
|
|
|
|
2018-07-26 21:58:22 +00:00
|
|
|
import java.awt.*;
|
2018-07-26 12:11:49 +00:00
|
|
|
import java.awt.image.BufferedImage;
|
2018-07-26 21:58:22 +00:00
|
|
|
import javax.imageio.ImageIO;
|
2018-07-27 11:32:34 +00:00
|
|
|
|
2018-07-26 12:11:49 +00:00
|
|
|
public class chunk {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private BufferedImage img;
|
2018-07-27 11:32:34 +00:00
|
|
|
private int[] average;
|
2018-07-26 12:11:49 +00:00
|
|
|
|
|
|
|
|
chunk(BufferedImage Img){
|
2018-07-28 12:35:06 +00:00
|
|
|
|
2018-07-27 11:32:34 +00:00
|
|
|
this.img = Img;
|
2018-07-28 12:35:06 +00:00
|
|
|
|
2018-07-27 11:32:34 +00:00
|
|
|
this.average = this.average();
|
2018-07-26 12:11:49 +00:00
|
|
|
}
|
|
|
|
|
|
2018-07-27 11:32:34 +00:00
|
|
|
/*
|
|
|
|
|
* GETTER AND SETTER
|
|
|
|
|
*/
|
2018-07-26 12:11:49 +00:00
|
|
|
public BufferedImage getImg() {
|
|
|
|
|
return img;
|
|
|
|
|
}
|
|
|
|
|
public void setImg(BufferedImage img) {
|
|
|
|
|
this.img = img;
|
|
|
|
|
}
|
2018-07-27 11:32:34 +00:00
|
|
|
|
|
|
|
|
public int[] getAverage() {
|
|
|
|
|
return average;
|
|
|
|
|
}
|
|
|
|
|
public void setAverage(int[] average) {
|
|
|
|
|
this.average = average;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* OTHER METHODS
|
|
|
|
|
*/
|
2018-07-28 12:35:06 +00:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Calculates and returns average color of buffered image
|
|
|
|
|
* @return Int[3] = {r,g,b,a}, if image contains a, otherwise a is always 255
|
|
|
|
|
*/
|
2018-07-26 12:11:49 +00:00
|
|
|
public int[] average(){
|
2018-07-27 11:32:34 +00:00
|
|
|
int r = 0, g = 0, b = 0, a = 0, x= 0, y = 0, pc = 0;
|
2018-07-26 21:58:22 +00:00
|
|
|
|
|
|
|
|
for(; y < this.img.getHeight(); y++){
|
|
|
|
|
for(; x < this.img.getWidth(); x++){
|
|
|
|
|
|
|
|
|
|
//get pixel value
|
|
|
|
|
int p = this.img.getRGB(x,y);
|
|
|
|
|
|
2018-07-27 11:32:34 +00:00
|
|
|
a += (p>>24) & 0xff;
|
|
|
|
|
r += (p>>16) & 0xff;
|
|
|
|
|
g += (p>>8) & 0xff;
|
|
|
|
|
b += p & 0xff;
|
|
|
|
|
pc++;
|
2018-07-26 12:11:49 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2018-07-27 11:32:34 +00:00
|
|
|
r /= pc;
|
|
|
|
|
g /= pc;
|
|
|
|
|
b /= pc;
|
|
|
|
|
a /= pc;
|
2018-07-26 12:11:49 +00:00
|
|
|
|
2018-07-27 11:32:34 +00:00
|
|
|
//System.out.println(r + " , " + g + " , " + b + " , " + a);
|
|
|
|
|
return new int[]{r,g,b,a};
|
2018-07-26 12:11:49 +00:00
|
|
|
}
|
2018-07-28 12:35:06 +00:00
|
|
|
//TODO: include alpha in calc.
|
|
|
|
|
/**
|
|
|
|
|
* Calculates and returns quadratic euclidean distance between given rgb vector and rgb vector of this
|
|
|
|
|
* @param a array of rgb values
|
|
|
|
|
* @return a Float with the quadratic distance between given rgb vector and rgb vector of this
|
|
|
|
|
*/
|
|
|
|
|
public float euclideanDistance(int[] a){
|
|
|
|
|
return ((this.average[0] - a[0])*(this.average[0] - a[0]) + (this.average[1] - a[1])*(this.average[1] - a[1]) + (this.average[2] - a[2])*(this.average[2] - a[2]));
|
|
|
|
|
}
|
2018-07-26 12:11:49 +00:00
|
|
|
}
|