Skip to content
Snippets Groups Projects
Select Git revision
  • d6f0f60e3127f95eaceb32d425fe72e032dd2b4d
  • master default protected
2 results

StateCircle0.java

Blame
  • Forked from COUETOUX Basile / graphic-2020
    Source project has a limited visibility.
    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);
        }
    }