diff --git a/.gradle/8.3/executionHistory/executionHistory.bin b/.gradle/8.3/executionHistory/executionHistory.bin
index 5d69cdf12365c6cb914c22b470171a44258c37ed..ddb4b12fab1ca5b2221a680defb1712d7dbba9e3 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 8371cc2bdf1f3a11bc0b0bd0b23b9973f6c37bf7..abcd265318d7524d399506a0a4916b24aa827114 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 27bb7201141549c840c3a3a410fed2ac633398b4..39f7ec8af8f4c6a380fd8a9f8fccf772d89f755e 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 b6a8b09d10b9ad58030c5e54869e1802a06843fe..e717aba62fcde27e2654d53ac57cc0c8dbf751eb 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 28d2de720fa180c12037e3504723dd1ee568a3c5..5a4414233f358fa22a3a72f48cdf664e33c7eadc 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 305980baca4591f9e7753bb04629fb5a68a206f6..81b374fde1840b9f57f5ad3b746c349f476f02cd 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/build/classes/java/main/DecreaseGrayLevels.class b/build/classes/java/main/DecreaseGrayLevels.class
new file mode 100644
index 0000000000000000000000000000000000000000..7a60c199104f467d3a91b018685962ca61a97ad1
Binary files /dev/null and b/build/classes/java/main/DecreaseGrayLevels.class differ
diff --git a/build/classes/java/main/Display.class b/build/classes/java/main/Display.class
index 4ae2f76aaf9878582f95633ec7d40a06e1ad8d44..1080fb79294bc6214b6a8a48f14413b539953290 100644
Binary files a/build/classes/java/main/Display.class and b/build/classes/java/main/Display.class differ
diff --git a/build/classes/java/test/DecreaseGrayLevelsTest.class b/build/classes/java/test/DecreaseGrayLevelsTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..5d64af8ec0735b5e0455f47708de5f289b9e5628
Binary files /dev/null and b/build/classes/java/test/DecreaseGrayLevelsTest.class differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/DecreaseGrayLevels.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/DecreaseGrayLevels.class.uniqueId1
new file mode 100644
index 0000000000000000000000000000000000000000..bbb4e560ff43318539963d09cef48f6ecf0aca50
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/DecreaseGrayLevels.class.uniqueId1 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Display.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/Display.class.uniqueId0
new file mode 100644
index 0000000000000000000000000000000000000000..978934d08c8abbe115ad764a01100b62f5d4c6d3
Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Display.class.uniqueId0 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Display.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/Display.class.uniqueId1
deleted file mode 100644
index 4ae2f76aaf9878582f95633ec7d40a06e1ad8d44..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Display.class.uniqueId1 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Invert.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/Invert.class.uniqueId0
deleted file mode 100644
index 937bb5f59de0351e14a8a6bb1c746cbcab7dc654..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Invert.class.uniqueId0 and /dev/null differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index b56a74fa99192d2b31cb986be7ec59087f6bf058..5b3b3fa5b8ff24e41bee8b4b377e248c8aea091c 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/build/tmp/compileTestJava/compileTransaction/stash-dir/DecreaseGrayLevelsTest.class.uniqueId0 b/build/tmp/compileTestJava/compileTransaction/stash-dir/DecreaseGrayLevelsTest.class.uniqueId0
new file mode 100644
index 0000000000000000000000000000000000000000..9187d8e0714b979389374fe033a806665a74db76
Binary files /dev/null and b/build/tmp/compileTestJava/compileTransaction/stash-dir/DecreaseGrayLevelsTest.class.uniqueId0 differ
diff --git a/build/tmp/compileTestJava/compileTransaction/stash-dir/MatrixGrayImageTest.class.uniqueId0 b/build/tmp/compileTestJava/compileTransaction/stash-dir/MatrixGrayImageTest.class.uniqueId0
deleted file mode 100644
index 67b82447a8b96d6230f510cdd74324ac82d9b5fd..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileTestJava/compileTransaction/stash-dir/MatrixGrayImageTest.class.uniqueId0 and /dev/null differ
diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
index 4782bfac4ec12e5ef2276f34a69e5e50305d5108..22f4d54e8cc10e1eb8d63f66c62ca6b046b88ca4 100644
Binary files a/build/tmp/compileTestJava/previous-compilation-data.bin and b/build/tmp/compileTestJava/previous-compilation-data.bin differ
diff --git a/src/main/java/DecreaseGrayLevels.java b/src/main/java/DecreaseGrayLevels.java
new file mode 100644
index 0000000000000000000000000000000000000000..6ed47528643c98ba3b3f84b57f435a6eb84f510f
--- /dev/null
+++ b/src/main/java/DecreaseGrayLevels.java
@@ -0,0 +1,49 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class DecreaseGrayLevels implements transform {
+
+    private final double nbGrayLevels;
+
+    public DecreaseGrayLevels(int nbGrayLevels) {
+        this.nbGrayLevels = nbGrayLevels;
+    }
+
+    @Override
+    public void applyTo(GrayImage image) {
+        for (int i = 0; i < image.getWidth(); i++) {
+            for (int j = 0; j < image.getHeight(); j++) {
+                double gray = findGray(image.getPixelGrayColor(i,j));
+                GrayColor newColor = new ByteGrayColor(gray);
+                image.setPixel(newColor, i, j);
+            }
+        } 
+    }
+
+
+    public double findGray(GrayColor initialColor) {
+
+        double color = initialColor.getLuminosity();
+        List<Double> intervalList = intervalFinder();
+
+        for (int i = 1; i < this.nbGrayLevels; i++) {
+            if (color < intervalList.get(i))
+                return intervalList.get(i-1);
+        }
+        return 1.;
+    }
+    
+    public List<Double> intervalFinder() {
+
+        double intervalGap = 1.0 / (this.nbGrayLevels - 1.0);
+        List<Double> intervalList = new ArrayList<>();
+
+        for (double i = 0; i < (nbGrayLevels); i += 1.0) {
+            double interval = 0.0 + intervalGap * i;
+            intervalList.add(interval);
+        }
+
+        return intervalList;
+    }
+
+}
diff --git a/src/main/java/Display.java b/src/main/java/Display.java
index d3fc6e7b6dfa6ba483bc85ef66271a9acf26710d..4a12bdda6af375e81ed7cd0fe033c13838e3ce0e 100644
--- a/src/main/java/Display.java
+++ b/src/main/java/Display.java
@@ -21,7 +21,7 @@ public class Display implements Initializable {
 
         this.image = MatrixGrayImage.createImageFromPGMFile("images/luminy.pgm");
 
-        transform transformation = new Invert();
+        transform transformation = new DecreaseGrayLevels(5);
 
         transformation.applyTo(this.image);
 
diff --git a/src/test/java/DecreaseGrayLevelsTest.java b/src/test/java/DecreaseGrayLevelsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c27202e6fc1607262ba0dcf06fa3052e783671a
--- /dev/null
+++ b/src/test/java/DecreaseGrayLevelsTest.java
@@ -0,0 +1,21 @@
+import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.*;
+import java.util.List;
+
+public class DecreaseGrayLevelsTest {
+
+    @Test
+    void intervalFinder_shouldReturnCorrectIntervals() {
+        DecreaseGrayLevels dgl = new DecreaseGrayLevels(3);
+        List<Double> intervals = dgl.intervalFinder();
+        assertThat(intervals).containsExactly(0.0, 0.5, 1.0);
+    }
+
+    @Test
+    void findGray_shouldReturnCorrectValue() {
+        DecreaseGrayLevels dgl = new DecreaseGrayLevels(5);
+        ByteGrayColor byte1 = new ByteGrayColor(1.);
+        Double find1 = dgl.findGray(byte1);
+        assertThat(find1).isEqualTo(1.);
+    }
+}