Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 2013
-
3 janv. 2007 à 01:45
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023
-
4 janv. 2007 à 09:30
Salut:
Comment faire pour "filtrer"/"supprimer" les pixels qu'on ne veut pas les afficher lors de l'affichage d'une image. Par exemple je ne veux pas afficher les pixels noirs.
J'en ai besoin pour faire la superposition de deux images.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 3 janv. 2007 à 14:13
Salut,
regarde du coté des classes :
java.awt.image.Kernel
java.awt.image.ConvolveOp
ou
encore du coté de java.awt.image.RGBImageFilter et remplace les pixels
noir par des pixels transparent (pour des exemples d'application de
cette classe regarde dans mes sources sur les filtre image):
public class Test extends JFrame{
private static final long serialVersionUID = 1802199483736051124L;
public Test(){
super();
setDefaultCloseOperation(3);
setSize(300, 300);
setLocationRelativeTo(null);
setBackground(Color.YELLOW);//histoire de verifier
//on charge l'image
Image img = getToolkit().createImage("img.png");
//on applique le filtre
FilteredImageSource fis = new FilteredImageSource(img.getSource(), new ImageFilters());
//on met a jour l'image avec le filtre
img = getToolkit().createImage(fis);
setContentPane(new JLabel(new ImageIcon(img)));
}
public static void main(String[] args) {
new Test().setVisible(true);
}
}
class ImageFilters extends RGBImageFilter{
public int filterRGB(int x, int y, int rgb) {
if(isBlack(rgb)){
//couleur de transparence
int a = 0xFF;
//on recupe les couleurs r, g et b
int r = (rgb & 0xFF0000) >> 16;
int g = (rgb & 0xFF00) >> 8;
int b = (rgb & 0xFF);
//on retourne la couleur en argb
return (a | r | g | b);
}
//on preserve la transparence
int a = (rgb & 0xFF000000);
return a | rgb;
}
private boolean isBlack(int rgb){
int n = 80;
//on parse la couleur si elle est relativement sombre
Color c = new Color(rgb);
if(c.getRed() <= n && c.getGreen() <= n && c.getBlue() <= n)
return true;
return false;
}
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 janv. 2007 à 00:30
Salut:
Je vais essayé ta solution, il y a une autre que se base sur l'utilisation de SDLJava, plus précisement la méthode SDL_MapRGB.
Comme la solution est là, je ne vais chercher loin.