diff --git a/.gradle/8.3/executionHistory/executionHistory.bin b/.gradle/8.3/executionHistory/executionHistory.bin index 4f6382c184eabecbd335e26486b281b4cf4daf71..244d3109b31719f69a55fb44afa9fbad59362eca 100644 Binary files a/.gradle/8.3/executionHistory/executionHistory.bin and b/.gradle/8.3/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.3/executionHistory/executionHistory.lock b/.gradle/8.3/executionHistory/executionHistory.lock index 62a6a9ee70cd6c52c2fa0a3291187888fb50fd26..f0a0d548fa2bf5167779ba4ef2fc08db563d52e6 100644 Binary files a/.gradle/8.3/executionHistory/executionHistory.lock and b/.gradle/8.3/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.3/fileHashes/fileHashes.bin b/.gradle/8.3/fileHashes/fileHashes.bin index 51f71e9c932e0ab839e3009fc85e46e1dc2cc507..1bcd3d2077c1c745b28195521923b4bb7832d4bb 100644 Binary files a/.gradle/8.3/fileHashes/fileHashes.bin and b/.gradle/8.3/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.3/fileHashes/fileHashes.lock b/.gradle/8.3/fileHashes/fileHashes.lock index 202e6a3ec2fc70ea7aa5e103dde72d55685e1238..fa57a03fd30a91dc84e7572cba89fd2e222b895a 100644 Binary files a/.gradle/8.3/fileHashes/fileHashes.lock and b/.gradle/8.3/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.3/fileHashes/resourceHashesCache.bin b/.gradle/8.3/fileHashes/resourceHashesCache.bin index d8cea3c56d8fd758d5b408f209f4e99393965978..44f5a53db1d6bfa04daa25726b67cb602041a434 100644 Binary files a/.gradle/8.3/fileHashes/resourceHashesCache.bin and b/.gradle/8.3/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index db8fe93b84f4de9132047ab34768545b54d91dec..c67e44d64627719f90d37dff9e3057564156780d 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/build/classes/java/main/Pixelate.class b/build/classes/java/main/Pixelate.class index 729b874dccdc98ae4e426dd1f85f1616d6b58c6f..041c4854ceb226e3b5bcf70910786b772c7b871d 100644 Binary files a/build/classes/java/main/Pixelate.class and b/build/classes/java/main/Pixelate.class differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Pixelate.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/Pixelate.class.uniqueId1 index 656924cc69183fd4d1c9f81a7bfd80f59a0b065c..2d0790e45beaf22ef523f964d26380d011468fc2 100644 Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Pixelate.class.uniqueId1 and b/build/tmp/compileJava/compileTransaction/stash-dir/Pixelate.class.uniqueId1 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 64db03ff04a968e653af2394d4508cf16be25b92..54eb85396719eedc02338d65a0696205902c1cdc 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/Pixelate.java b/src/main/java/Pixelate.java index 3c22ae5aaa07abf4c000ecac79b822ef51b1583f..713b50ba3358c1c94e530799a4717b966830e015 100644 --- a/src/main/java/Pixelate.java +++ b/src/main/java/Pixelate.java @@ -2,39 +2,51 @@ import java.util.ArrayList; import java.util.List; public class Pixelate implements transform { - private int newPixelSize; + private final int newPixelSize; public Pixelate(int newPixelSize) { this.newPixelSize = newPixelSize; } + @Override public void applyTo(GrayImage image) { - - GrayColor newColor = new ByteGrayColor(); - - for (int i = 0; i < image.getWidth() - this.newPixelSize; i += this.newPixelSize) { - for (int j = 0; j < image.getHeight() - this.newPixelSize; j += this.newPixelSize) { - newColor = averageColor(image, i, j); - for (int square1 = 0; square1 < this.newPixelSize; square1++) - for (int square2 = 0; square2 < this.newPixelSize; square2++) - image.setPixel(newColor, i+square1, j+square2); - - } + int width = image.getWidth(); + int height = image.getHeight(); + + // On parcourt l’image par blocs de taille newPixelSize + for (int x = 0; x < width; x += newPixelSize) { + for (int y = 0; y < height; y += newPixelSize) { + // Calcul de la couleur moyenne pour le bloc courant + GrayColor average = averageColor(image, x, y, width, height); + + // Application de la couleur moyenne à tous les pixels du bloc + for (int i = x; i < Math.min(x + newPixelSize, width); i++) { + for (int j = y; j < Math.min(y + newPixelSize, height); j++) { + image.setPixel(average, i, j); + } + } + } } } - public GrayColor averageColor(GrayImage image, int x, int y) { - double average = 0; - - for (int i = 0; i < this.newPixelSize; i++) { - for (int j = 0; j < this.newPixelSize; j++) { - average += image.getPixelGrayColor(x + i, y + j).getLuminosity(); + /** + * Calcule la couleur moyenne d’un bloc de taille newPixelSize à partir de la position (startX, startY). + * On s’assure de ne pas dépasser les bords de l’image. + */ + private GrayColor averageColor(GrayImage image, int startX, int startY, int width, int height) { + double sum = 0.0; + int count = 0; + + for (int i = startX; i < Math.min(startX + newPixelSize, width); i++) { + for (int j = startY; j < Math.min(startY + newPixelSize, height); j++) { + sum += image.getPixelGrayColor(i, j).getLuminosity(); + count++; } } - average /= Math.pow(this.newPixelSize, 2); - + double average = (count == 0) ? 0.0 : sum / count; // average = sun / count sauf si count = 0, dans ce cas average = 0 (enlève erreur DivisionByZero) return new ByteGrayColor(average); } } +