Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package hs.algo.excercise2;
- import java.awt.*;
- import java.awt.event.WindowAdapter;
- import java.awt.event.WindowEvent;
- import java.awt.image.PixelGrabber;
- @SuppressWarnings("serial")
- public class Algos2 extends Frame {
- private int W;
- private int H;
- private Image imgFile;
- private int[] imgFilePixels, imgColors, imgColorFreq;
- @Override
- public void paint(Graphics g) {
- g.drawImage(imgFile, getInsets().left, getInsets().top, this);
- }
- @Override
- public void update(Graphics g) {
- paint(g);
- }
- private int[] relinkArray(int[] a1) {
- return a1;
- }
- private void countAllColours(int[] pixels, int[] imgCol, int[] imgFreq) {
- int colorNumber = 0;
- int[] temp_colors = new int[pixels.length];
- boolean hadWeZeroYet = false;
- boolean zeroKick = false;
- for(int i = 0; i < pixels.length; i++) {
- boolean colorAlreadyThere = false;
- if (pixels[i] == 0) hadWeZeroYet = true;
- for (int k = 0; k < temp_colors.length && !colorAlreadyThere; k++) {
- if (temp_colors[k] == pixels[i]) {
- colorAlreadyThere = true;
- break;
- }
- }
- if (hadWeZeroYet && colorAlreadyThere && !zeroKick) {
- temp_colors[colorNumber] = pixels[i];
- colorNumber++;
- zeroKick = true;
- }
- if (!colorAlreadyThere) {
- temp_colors[colorNumber] = pixels[i];
- colorNumber++;
- }
- }
- int[] ImgColRef = new int [colorNumber];
- int[] imgFreqRef = new int [colorNumber];
- imgCol = relinkArray(ImgColRef);
- imgFreq = relinkArray(imgFreqRef);
- for(int i = 0; i < colorNumber; i++) {
- imgCol[i] = temp_colors[i];
- }
- for (int i = 0; i < colorNumber; i++) {
- for(int j = 0; j < pixels.length; j++) {
- if(imgCol[i] == pixels[j]) imgFreq[i]++;
- }
- }
- bubbleSort(imgFreq, imgCol);
- for (int i = 0; i < colorNumber; i++) {
- // int blue1 = imgCol[i] & 0x000000ff;
- // int green1 = (imgCol[i] & 0x0000ff00) >> 8;
- // int red1 = (imgCol[i] & 0x00ff0000) >> 16;
- // int alpha1 = (imgCol[i] & 0xff000000) >> 24;
- String hex = Integer.toHexString(imgCol[i]);
- // String hexstring = "#" + String.format("%02x%02x%02x%02x" , alpha1, red1, green1, blue1) + " " + imgFreq[i];
- String hexstring = "#" + hex + " " + imgFreq[i];
- System.out.println(hexstring);
- }
- }
- public static void bubbleSort(int[] comparable, int[] comparable2) {
- boolean changed = false;
- do {
- changed = false;
- for (int a = 0; a < comparable.length - 1; a++) {
- if (comparable[a] > comparable[a + 1]) {
- int tmp = comparable[a];
- comparable[a] = comparable[a + 1];
- comparable[a + 1] = tmp;
- int tmp2 = comparable2[a];
- comparable2[a] = comparable2[a + 1];
- comparable2[a + 1] = tmp2;
- changed = true;
- }
- }
- } while (changed);
- }
- private Image openImage(String imgPath) {
- Image img = getToolkit().getImage(imgPath);
- try {
- MediaTracker mt = new MediaTracker(this);
- mt.addImage(img, 1);
- mt.waitForAll();
- } catch (InterruptedException e) { e.printStackTrace(); }
- return img;
- }
- private int[] grabPixels(Image img) {
- int[] array = new int[W*H];
- PixelGrabber grab = new PixelGrabber(img, 0, 0, W, H, array, 0, W);
- try {
- grab.grabPixels();
- } catch (InterruptedException e) { e.printStackTrace(); }
- return array;
- }
- public Algos2() {
- // imgFile = openImage("src/hs/algo/excercise2/PA221197.jpg");
- imgFile = openImage("src/hs/algo/excercise2/3973516097_83f8a5de5c_o.jpg");
- W = imgFile.getWidth(this);
- H = imgFile.getHeight(this);
- imgFilePixels = grabPixels(imgFile);
- System.out.println(W*H);
- System.out.println(imgFilePixels.length);
- int[] a1 = { 0, 5, 5, 5, 3, 3, 0, 0, 1, 2, 1, 5};
- countAllColours(imgFilePixels, this.imgColors, this.imgColorFreq);
- System.out.println(imgFilePixels.length);
- System.out.println(imgColors);
- setBounds(600, 200, W, H);
- setVisible(true);
- addWindowListener(new WindowAdapter(){
- public void windowClosing(WindowEvent we){
- System.exit(0);
- }
- });
- }
- public static void main(String[] args) {
- new Algos2();
- }
- }
Add Comment
Please, Sign In to add comment