Bonjour à tous
Bon je pense ne pas m'être trompé d'endroit pour parler de mes problèmes avec Java x)
Alors, je suis actuellement en stage et je dois développer en ce moment une application Java permettant de modifier assez basiquement une image au préalablement chargée.
J'ai donc fait une dizaine de petites fonctions tel que passer en noir et blanc, redimensionner, flouter...
Ah flouter ! Voilà mon premier problème :p Oui oui, mon logiciel floute, mais encore selon une valeure fixe :p or j'ai un joli Slider qui n'attend que d'être utile ^^ Malheureusement je n'arrive pas à l'utiliser pour la matrice de flou. J'ai essayer notament un tableau de valeur*valeur rempli de 0.1f, mais ça me rendait noir :/
Voilà mon code actuel, si quelqu'un a une solution ^^ (rayez les mentions inutiles)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 private void SliderBlurMouseReleased(java.awt.event.MouseEvent evt) { int fact = SliderBlur.getValue(); if (fact == 0) { fact = 1; } for (int i = 0; i < fact / 20; i++) { if (fact % 2 != 0) { fact = fact + 1; } fact = fact / 2; } LabelBlurValue.setText("" + SliderBlur.getValue()); /* float[] matrice = new float[fact * fact]; for (int i = 0; i < (fact * fact); i++) { matrice[i] = 0.1f; } */ float[] matrice = { 0.1f, 0.1f, 0.1f, 0.1f, 0.2f, 0.1f, 0.1f, 0.1f, 0.1f }; Toolkit toolkit = Toolkit.getDefaultToolkit(); Image image = toolkit.getImage(Image.getPath()); BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, matrice), ConvolveOp.EDGE_NO_OP, null); BufferedImage ImageFloue = op.filter(toBufferedImage(image), null); try { File NewImage = new File(Image.getName()); ImageIO.write(ImageFloue, "png", NewImage); Image = NewImage; /*Hashtable<Integer, File> ImagesTemp = new Hashtable<Integer, File>(); int i = 1; while (i != numImg) { ImagesTemp.put(i, ImageTrace.get(i)); i++; } ImageTrace = ImagesTemp;*/ ImageTrace.put(ImageTrace.size() + 1, Image); numImg++; this.paintComponent(ImageArea.getGraphics()); NewImage.deleteOnExit(); } catch (IOException ex) { Logger.getLogger(JPanelModifImg.class.getName()).log(Level.SEVERE, null, ex); } if (ImageTrace.size() > 0) { ButtonCancelAction.setEnabled(true); } LabelImgCourante.setText("Num Img : " + (numImg - 1)); }
Et maintenant un 2e problème : je souhaite créer un filtre (et par la suite un transfert) de couleur. Je me suis basé sur une fonction de négatif que j'ai trouvé, mais impossible d'arriver à mes fins x)
Voilà le code du filtre utilisé :
l'appel :
le filtre
Code : Sélectionner tout - Visualiser dans une fenêtre à part Image ImgTransf = createImage(new FilteredImageSource(image.getSource(), new FiltreColor(fact, ColorTransfer)));
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class FiltreColor extends RGBImageFilter { float value; Color color; public FiltreColor(float value, Color color) { // La transformation des couleurs ne dépend pas // des coordonnées des points de l'image canFilterIndexColorModel = true; this.value = value; this.color = color; } public int filterRGB(int x, int y, int rgb) { int alpha = rgb & 0xFF000000; int rouge = rgb & color.getRed(); int vert = rgb & color.getGreen(); int bleu = rgb & color.getBlue(); return alpha | rouge | vert | bleu; } }
Voilà voilàSi quelqu'un arrive à me donner quelques trucs, j'en serais très reconnaissant ^^
Merci d'avance
Murtagh
Partager