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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.