Skip to content
Snippets Groups Projects
Select Git revision
  • 6a4221ab87822872a7792717c06491941e0e19b3
  • main default protected
  • master
3 results

GrayColor.java

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Pixelate.java 1.85 KiB
    import java.util.ArrayList;
    import java.util.List;
    
    public class Pixelate implements transform {
        private final int newPixelSize;
    
        public Pixelate(int newPixelSize) {
            this.newPixelSize = newPixelSize;
        }
    
        @Override
        public void applyTo(GrayImage image) {
            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);
                        }
                    }
                }
            }
        }
    
        /**
         * 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++;
                }
            }
    
            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);
        }
    }