From 0fd0410de86d2a66de0427500df0ce81abaa5f61 Mon Sep 17 00:00:00 2001 From: Patrice Matz Date: Fri, 27 Jul 2018 13:32:34 +0200 Subject: [PATCH] replacements pics are getting loaded TODO: find closest average fill array if not enough pics replace chunks of original --- .idea/workspace.xml | 116 ++++++++++++++++++++++++++++++------- collage.jpeg | Bin 0 -> 7978 bytes src/com/company/Main.java | 57 ++++++++++++++---- src/com/company/chunk.java | 51 +++++++++------- 4 files changed, 172 insertions(+), 52 deletions(-) create mode 100644 collage.jpeg diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 1510c24..94ed8f4 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,6 +2,7 @@ + @@ -18,24 +19,38 @@ - - + + + + + + + + + + - - + + - - + + + + + + + + @@ -181,11 +196,12 @@ + - @@ -209,13 +225,12 @@ - + - + - @@ -227,6 +242,7 @@ + @@ -246,18 +262,25 @@ + - - + + - - + + + + + + + + @@ -268,6 +291,7 @@ + @@ -278,8 +302,14 @@ - - + + + + + + + + @@ -290,6 +320,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -301,22 +361,34 @@ - - + + - - + + + + + + + + + + + + + - - + + + diff --git a/collage.jpeg b/collage.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..eb0a374d3d69acf24a21bdf10002275b4c047980 GIT binary patch literal 7978 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 PwD9tl*>Et3uU-EIi4^(r literal 0 HcmV?d00001 diff --git a/src/com/company/Main.java b/src/com/company/Main.java index d0d1fd0..f7998bf 100644 --- a/src/com/company/Main.java +++ b/src/com/company/Main.java @@ -3,38 +3,75 @@ import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.awt.*; +import java.util.ArrayList; public class Main { public static void main(String[] args) throws IOException { - File file = new File("C:\\Users\\Elliot\\Desktop\\bear.jpeg"); + File file = new File("C:\\Users\\Elliot\\Desktop\\bear.jpg"); FileInputStream fis = new FileInputStream(file); BufferedImage image = ImageIO.read(fis); //reading the image file - int rows = 20; - int cols = 30; - int chunks = rows * cols; + ArrayList repPaths = getAllImages(new File("C:\\Users\\Elliot\\Desktop\\test\\")); + + int rows = 3; + int cols = 3; int chunkWidth = image.getWidth() / cols; // determines the chunk width and height int chunkHeight = image.getHeight() / rows; int count = 0; - chunk[] imgs = new chunk[chunks]; + + chunk[] chunks = new chunk[rows * cols]; + chunk[] replacements = new chunk[rows * cols]; + for (int x = 0; x < rows; x++) { for (int y = 0; y < cols; y++) { //Initialize the image array with image chunks BufferedImage tempimg = new BufferedImage(chunkWidth, chunkHeight, image.getType()); - imgs[count] = new chunk(tempimg); - imgs[count].average(); - + chunks[count] = new chunk(tempimg); // draws the image chunk - Graphics2D gr = imgs[count++].getImg().createGraphics(); + Graphics2D gr = chunks[count++].getImg().createGraphics(); gr.drawImage(image, 0, 0, chunkWidth, chunkHeight, chunkWidth * y, chunkHeight * x, chunkWidth * y + chunkWidth, chunkHeight * x + chunkHeight, null); gr.dispose(); + + chunks[count-1].average(); } } - ImageIO.write(imgs[2].getImg(), "jpg", new File("collage.jpg")); + + for (int i = 0; i < cols; i++) { + // read file from path + File tempfile = new File(repPaths.get(i)); + FileInputStream tempfis = new FileInputStream(tempfile); + + // fill array of chunks with read images + BufferedImage tempimg = ImageIO.read(tempfis); + replacements[i] = new chunk(tempimg); + } + + ImageIO.write(chunks[8].getImg(), "jpeg", new File("collage.jpeg")); } + + /** + * Returns all jpg images from a directory in an array. + * Source: http://www.java2s.com/Code/Java/2D-Graphics-GUI/Returnsalljpgimagesfromadirectoryinanarray.htm + * @param directory the directory to start with + * @return an ArrayList containing all the file paths or nul if none are found.. + * @throws IOException + */ + public static ArrayList getAllImages(File directory) throws IOException { + ArrayList resultList = new ArrayList(256); + File[] f = directory.listFiles(); + for (File file : f) { + if (file != null && file.getName().toLowerCase().endsWith(".jpg")) { + resultList.add(file.getCanonicalPath()); + } + } + if (resultList.size() > 0) + return resultList; + else + return null; + } } diff --git a/src/com/company/chunk.java b/src/com/company/chunk.java index 66f7da7..dd893cd 100644 --- a/src/com/company/chunk.java +++ b/src/com/company/chunk.java @@ -3,23 +3,40 @@ package com.company; import java.awt.*; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; + public class chunk { private BufferedImage img; + private int[] average; chunk(BufferedImage Img){ - this.img = Img; + this.img = Img; + this.average = this.average(); } +/* +* GETTER AND SETTER +*/ 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 +*/ public int[] average(){ - int r = 0, g = 0, b = 0, a = 0, x= 0, y = 0; + int r = 0, g = 0, b = 0, a = 0, x= 0, y = 0, pc = 0; for(; y < this.img.getHeight(); y++){ for(; x < this.img.getWidth(); x++){ @@ -27,27 +44,21 @@ public class chunk { //get pixel value int p = this.img.getRGB(x,y); - //get alpha - a = (p>>24) & 0xff; - - //get red - r = (p>>16) & 0xff; - - //get green - g = (p>>8) & 0xff; - - //get blue - a = p & 0xff; - + a += (p>>24) & 0xff; + r += (p>>16) & 0xff; + g += (p>>8) & 0xff; + b += p & 0xff; + pc++; } } - r /= x*y; - g /= x*y; - b /= x*y; - a /= x*y; + r /= pc; + g /= pc; + b /= pc; + a /= pc; - System.out.println(r + " , " + g + " , " + b + " , " + a); - return new int[]{r,g,b}; + //System.out.println(r + " , " + g + " , " + b + " , " + a); + return new int[]{r,g,b,a}; } + }