Créateur de pochoirs

Description

Ce programme permet de créer un pochoir à partir d'une photo.

Des pochoirs multi-couches peuvent être réalisés mais l'interface graphique ne permet de ne créer que des pochoirs simples

Source / Exemple :


package fr.julien.stencil.metier;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;

/**

  • <b>Stencil est la classe qui permet de définir un pochoir</b>
  • <p>
  • Cette classe est caractérisée par les informations suivantes :
  • <ul>
  • <li>L'image servant à créer le pochoir</li>
  • <li>Les bornes permettant de définir les contours</li>
  • </ul>
  • </p>
  • <p>
  • De plus, cette classe contient un tableau de couleurs rgb qui permet de
  • définir les couleurs à appliquer entre chacune des bornes définies
  • dans l'intervalle des rgb
  • </p>
  • <p>
  • Cette classe contient également des méthodes permettant de modifier les
  • bornes, d'afficher des stats sur l'image et de créer les pochoirs.
  • </p>
  • @author Julien
  • @version 1.0
*
  • /
public class Stencil { /**
  • L'image servant de base pour le pochoir
  • /
private BufferedImage image; /**
  • Les bornes dans l'intervalle des couleurs rgb
  • /
private List<Integer> bornes; /**
  • Les couleurs à utiliser entre chacune des bornes
  • /
public static int[] colors = new int[]{-16777216, -1, -14336}; /**
  • <b>Constructeur de pochoir</b>
  • @param nbLayer
  • Le nombre de bornes à utiliser
  • @param image
  • L'image de référence
  • /
public Stencil(int nbLayer, File image) { bornes = new ArrayList<Integer>(); try { this.image = ImageIO.read(image); for(int i=0; i<nbLayer; i++){ bornes.add(getRGBMoyen()); } } catch (IOException e) { e.printStackTrace(); } } /**
  • Méthode permettant de créer les images correspondant aux pochoirs
  • @return les pochoirs
  • /
public List<Image> getStencils(){ List<Image> images = new ArrayList<Image>(); int w = image.getWidth(); int h = image.getHeight(); BufferedImage bimg = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB); int[] rgbs = new int[w*h]; image.getRGB(0,0,w,h,rgbs,0,w); bimg.getRaster().setDataElements(0, 0, w, h, rgbs); for(int i=0; i<w; i++){ for(int j=0; j<h; j++){ int rgb = image.getRGB(i,j); bimg.setRGB(i,j,colors[determinerIntervalle(rgb)]); } images.add(bimg); } return images; } /**
  • Méthode permettant de détermienr la couleur à utiliser pour un rgb
  • @param indice
  • La couleur du rgb
  • @return la couleur à utiliser
  • /
private int determinerIntervalle(int indice){ int res=0; boolean ok=false; for(int i=0; i<bornes.size(); i++){ if(indice<bornes.get(i)){ res=i; ok=true; break; } } if(!ok){ res=bornes.size(); } return res; } /**
  • Fonction permettant d'afficher des stats sur l'image
  • afin de définir les bornes à utiliser
  • /
public void printStats(){ int w = image.getWidth(); int h = image.getHeight(); int[] rgbs = new int[w*h]; image.getRGB(0,0,w,h,rgbs,0,w); int min=rgbs[0]; int max=rgbs[0]; for(int i=0; i<w*h; i++){ if(rgbs[i]>max){ max=rgbs[i]; } if(rgbs[i]<min){ min=rgbs[i]; } } System.out.println("Moyenne : "+getRGBMoyen()); System.out.println("Minimum : "+min); System.out.println("Maximum : "+max); } /**
  • Fonction retournant le rgb moyen de l'image
  • @return le rgb moyen de l'image
  • /
public int getRGBMoyen(){ int w = image.getWidth(); int h = image.getHeight(); int[] rgbs = new int[w*h]; image.getRGB(0,0,w,h,rgbs,0,w); int moyenne=0; for(int i=0; i<w*h; i++){ moyenne+=rgbs[i]/(w*h); } return moyenne; } /**
  • Fonction retournant la largeur de l'image
  • @return la largeur de l'image
  • /
public int getWidth(){ return image.getWidth(); } /**
  • Fonction retournant la hauteur de l'image
  • @return la hauteur de l'image
  • /
public int getHeight(){ return image.getHeight(); } /**
  • Méthode d'acces à l'image de référence
  • @return l'image
  • /
public BufferedImage getImage() { return image; } /**
  • Méthode d'accès aux bornes de l'image
  • @return les bornes
  • /
public List<Integer> getBornes() { return bornes; } }

Codes Sources

A voir également