mosaik/src/com/company/chunk.java

80 lines
1.9 KiB
Java
Raw Normal View History

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-26 12:11:49 +00:00
public class chunk {
private BufferedImage img;
private int[] average;
2018-07-26 12:11:49 +00:00
chunk(BufferedImage Img){
2018-07-28 12:35:06 +00:00
this.img = Img;
2018-07-28 12:35:06 +00:00
this.average = this.average();
2018-07-26 12:11:49 +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;
}
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(){
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);
a += (p>>24) & 0xff;
r += (p>>16) & 0xff;
g += (p>>8) & 0xff;
b += p & 0xff;
pc++;
2018-07-26 12:11:49 +00:00
}
}
r /= pc;
g /= pc;
b /= pc;
a /= pc;
2018-07-26 12:11:49 +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
}