Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Java2D [Traitement], multi-threads et XML

3 réponses
Avatar
JVIajesty
Bonjour à tous! Pour un premier post j'aurais voulu etre moins
effrayant coté longueur, mais il est 2h20 du matin, et j'ai tellement
de travail restant qu'une aide, meme minime, serait la bienvenue!

Alors tout d'abord, je suis en train de creer un logiciel de
manipulation d'images, plutot de traitement et pour ce faire, j'aurais
quelques questions quand aux fonctionnalités que je desire implémenter:

1. Je dois etre capable de filtrer l'images (flou, et les filtres
basiques) càd avec matrices de convultion 3*3 jusque 7*7. Alors ma
question est: est-ce qu'il vaut mieux charger l'image ENTIERE en
memoire (cad en bytes, ce qui prend le moins de place je pense, donc un
Vecteur de longueur 4 (R, G, B, Alpha) dans un tableau de la taille
[hauteur*largeur]) ou bien utiliser un noyau (Kernel ou matrice) qui
parcoure l'image tout simplement. J'ai vu que cela était possible mais
je ne connais pas ses limites.

2. Si j'utilise un kernel - pour moi il y a grand interet si je
travaille sur des images relativement grandes, je pense, mais je peux
me tromper - puis-je definir l'endroit préci ou il doit s'appliquer?
cad si je choisis un Kernel de 3*3, puis-je lui dire "ton point central
est en (10,5)"

3. Comment faire pour reprendre les valeurs de l'image a cet endroit,
cad les nuances R,G,B si le fichier n'est pas en memoire sous forme de
tableau (BufferReader? Crop?)

4. Dans un autre domaine, l'image sera affichée dans l'interface
utilisateur, et dans ce cas, j'aimerais pouvoir etre capable de
selectioner une zone de l'image et faire aussi des traitements dessus,
nombre de pixels a l'interieur, repartition des couleurs R, G, B, etc.
Alors ma question est, comment faire pour recuperer ces données. Mais
je n'ai vraiment aucune idée par ou commencer...Graphics en partant de
l'image affichée a l'ecran?

5. J'aimerais aussi pouvoir zoomer dans l'interface, (je n'ai pas
encore bien regardé ce point) mais dans ce cas, cmt faire facilement
sans flipping et puis, comment faire pour mettre a jour les zones
selectionnées auparavant > qu'elles grossissent en zoomant donc.
Faut-il toujours tout redessiner?

6. Pour en revenir vite fait aux zones de selection, est-il possible
de pouvoir en creer plusieures et de pouvoir les deplacer, tourner,
etc, un peu comme des objets sur l'image. Cad est-ce qu'on peut creer
des "calques" dans java, pour ne pas devoir écraser le BufferReader
affiché a l'ecran par la zone de selection.

7. J'hesite pour l'instant entre toutes sortes d'implementations
differentes, si quelqu'un avait une idée en terme d'efficacité a me
proposer.

Voilà c'est fini, plus de questions "pointues", mais plutot quelques
questions d'ordre général:

a. J'aimerais créer une interface multi-threads, pour que le GUI ne
cale pas en plein calcul secondaire (par exemple compter les points de
couleur verte dans l'image) mais apparement avec Swing c'est assez
problematique. Vous auriez des details a me proposer? J'ai par exemple
des composants JPanel avec quelques boutons, et des zones label que
j'aimerais mettre a jour lorsque je selectionne une partie d'image.
Cela pose-t-il vraiment probleme si je lance des threads pour mettre a
jour les composants swing? Ou cela ne peut pas se faire directement?

b. Question anodine, par exemple, pour sauvegarder les objets
"selection", existe-t-il un moyen simple (tout est relatif) de le faire
en XML, cad creer une arborescence XML a partir des parametres contenus
dans l'objet? Sans avoir a creer 50 methodes "exportXml"? Et dans ce
cas, est-il possible d'initialiser a partir d'un fichier XML des objets
en Java? J'ai entendu dire que oui, mais je ne saurais rien affirmer.



Voilà, je vous remercie déjà d'avoir été jusque là. Si quelqu'un
possèdes les connaissances, ou meme une petite partie susceptible de
m'aider a avancer dans ce programme. Je l'en remercie d'avance s'il
veut bien les partager!




Ad

3 réponses

Avatar
Hervé AGNOUX
JVIajesty wrote:

Bonjour à tous! Pour un premier post j'aurais voulu etre moins
effrayant coté longueur, mais il est 2h20 du matin, et j'ai tellement
de travail restant qu'une aide, meme minime, serait la bienvenue!



Je ne peux malheureusement pas beaucoup t'aider, j'en suis toujours resté à
des traitements graphiques faciles.

Mais pour les questions pointues j'ai remarqué que le blog de Chet Haase, un
ingé de chez sun, aidait à se faire une petite opinion :
http://weblogs.java.net/blog/chet/.

Il y a également le forum java 2D où tu pourras recevoir de l'aide :
http://forum.java.sun.com/forum.jspa?forumID (il y a aussi le forum 3D).



Voilà c'est fini, plus de questions "pointues", mais plutot quelques
questions d'ordre général:

a. J'aimerais créer une interface multi-threads, pour que le GUI ne
cale pas en plein calcul secondaire (par exemple compter les points de
couleur verte dans l'image) mais apparement avec Swing c'est assez
problematique. Vous auriez des details a me proposer? J'ai par exemple
des composants JPanel avec quelques boutons, et des zones label que
j'aimerais mettre a jour lorsque je selectionne une partie d'image.
Cela pose-t-il vraiment probleme si je lance des threads pour mettre a
jour les composants swing? Ou cela ne peut pas se faire directement?



Il n'y a pas de soucis avec les threads et swing, la technique est bien
rodée. Il y a un thread qui s'occupe de swing justement, tous les autres
peuvent faire ce qu'ils veulent (sauf perturber le thread swing).

Pour passer du thread swing aux autres, tu lances d'autres threads, tout
simplement. Et pour passer d'un thread quelquonque au thread swing il faut
utiliser les méthodes de javax.swing.SwingUtilities ou de
java.awt.EventQueue. Tout est expliqué bien mieux que je ne pourrai le
faire à "How to Use Threads ",
http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html.


b. Question anodine, par exemple, pour sauvegarder les objets
"selection", existe-t-il un moyen simple (tout est relatif) de le faire
en XML, cad creer une arborescence XML a partir des parametres contenus
dans l'objet? Sans avoir a creer 50 methodes "exportXml"? Et dans ce
cas, est-il possible d'initialiser a partir d'un fichier XML des objets
en Java? J'ai entendu dire que oui, mais je ne saurais rien affirmer.



Pour les moyens simples il y a java.beans.XMLDecoder / Encoder.

Bonne chance !


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
Ad
Bonjour tous,

alors merci de ton aide Hervé, j'ai posté mes questions dans les forums
java, mais toujours sans reponse. Cependant j'ai bon espoir. J'ai
neanmoins avancé coté swing et xml, ça se paufine mais il me reste
toujours le core a ecrire parfaitement.

Et j'aurais d'autres petites questions, plutot faciles je pense mais
qui me prenent la tete:

En fait, c'est sur le positionnement en java, mon programme est comme
suit:

|================================================|
| TOOLBAR |
|================================================|
|JSplitPane | |
| | |
| | |
| | |
| | |
| | |
|================================================|
|* FilterPanel |
| |
| |
|================================================|


Alors voilà mon problème: dans mon programme principal (JFrame) il y a
les composants ci-dessus donc le FilterPanel qui est une extension de
JPanel.

Donc dans la classe FilterPanel, j'ai defini nombre de composants
(listbox, etc). Mais lorsque je lance mon application, tous ces
composants sont centrés dans l'interface JFrame, et ils sont
generalement trop petits.

Comment puis-je faire pour que les composants definis a l'interieur de
mon FilterPanel occupent toute la place (hauteur et largeur) dans
l'interface graphique??? Et qu'ils soient positionnés dans le coin
superieur gauche (la ou j'ai placé *)

J'utilise pour le positionnement un GridBagLayout, mais est-ce bien
adapté? J'ai eu plus de mal avec les autres en fait c'est pour cela que
j'ai opté pour cette solution.

Mon FilterPanel ressemble à ceci:

================================================ ToggleButton
-------------------------------------------------
Button | Button
-------------------------------------------------
TabbedPane

================================================
J'aimerais creer un ToggleButton qui fasse toute la longueur de mon
interface graphique. Qui servirait a fermer le FilterPanel et a le
reouvrir. Si quelqu'un a une idée aussi pour faire en sorte que mon
FilterPanel ne fasse plus que ~15px de hauter (la hauteur du bouton en
fait)

ou si quelqu'un sait comment faire pour obtenir des boutons sur coté un
peu comme dans eclipse ou netbeans, qui permettent en cliquant de
reduire la zone de proprietes.

Question subsidiaire:

en regardant cette url:
http://www.netbeans.org/images/screenshots/4.1/nb_midp_visual_editor.png

comment pourrais-je faire pour creer des panels similaires au panel
"inspector" sur l'image, ou "commands", "displayables". J'aimerais
pouvoir le faire, mais de quelle extension proviennent-ils? extend
JPanel? extend JSplitPane? extend JDialog. N'y a-t-il pas moyen de le
faire aisement?



Merci de votre attention,



Ad
Avatar
Hervé AGNOUX
Et ben dis donc ! Cela fait beaucoup de questions ! Ma réponse générale sera
que chaque chose viendra à son heure, et que en attendant il faut rester
simple !

Pour le positionnement, le GridBagLayout n'est pas mal, il parait que l'on
peut tout faire avec. Moi j'utilise plutôt des compositions de Border et
Box layout. Avec ces deux layouts on peut jouer sur le positionnement et
l'occupation d'espace.

Pour définir une hauteur maximale il faut utiliser setMaximumSize ET
utiliser un layout qui la prenne en compte, comme un BoxLayout.

Pour mettre des choses sur le coté on peut utiliser un BorderLayout, en
utilisant les contraintes WEST ou EAST.

Il n'existe aucun moyen de faire aisément des
inspecteurs-displayable-commands-dialog-panels !

Ad wrote:

Bonjour tous,

alors merci de ton aide Hervé, j'ai posté mes questions dans les forums
java, mais toujours sans reponse. Cependant j'ai bon espoir. J'ai
neanmoins avancé coté swing et xml, ça se paufine mais il me reste
toujours le core a ecrire parfaitement.

Et j'aurais d'autres petites questions, plutot faciles je pense mais
qui me prenent la tete:

En fait, c'est sur le positionnement en java, mon programme est comme
suit:

|================================================|
| TOOLBAR |
|================================================|
|JSplitPane | |
| | |
| | |
| | |
| | |
| | |
|================================================|
|* FilterPanel |
| |
| |
|================================================|


Alors voilà mon problème: dans mon programme principal (JFrame) il y a
les composants ci-dessus donc le FilterPanel qui est une extension de
JPanel.

Donc dans la classe FilterPanel, j'ai defini nombre de composants
(listbox, etc). Mais lorsque je lance mon application, tous ces
composants sont centrés dans l'interface JFrame, et ils sont
generalement trop petits.

Comment puis-je faire pour que les composants definis a l'interieur de
mon FilterPanel occupent toute la place (hauteur et largeur) dans
l'interface graphique??? Et qu'ils soient positionnés dans le coin
superieur gauche (la ou j'ai placé *)

J'utilise pour le positionnement un GridBagLayout, mais est-ce bien
adapté? J'ai eu plus de mal avec les autres en fait c'est pour cela que
j'ai opté pour cette solution.

Mon FilterPanel ressemble à ceci:

================================================ > ToggleButton
-------------------------------------------------
Button | Button
-------------------------------------------------
TabbedPane

================================================ >
J'aimerais creer un ToggleButton qui fasse toute la longueur de mon
interface graphique. Qui servirait a fermer le FilterPanel et a le
reouvrir. Si quelqu'un a une idée aussi pour faire en sorte que mon
FilterPanel ne fasse plus que ~15px de hauter (la hauteur du bouton en
fait)

ou si quelqu'un sait comment faire pour obtenir des boutons sur coté un
peu comme dans eclipse ou netbeans, qui permettent en cliquant de
reduire la zone de proprietes.

Question subsidiaire:

en regardant cette url:
http://www.netbeans.org/images/screenshots/4.1/nb_midp_visual_editor.png

comment pourrais-je faire pour creer des panels similaires au panel
"inspector" sur l'image, ou "commands", "displayables". J'aimerais
pouvoir le faire, mais de quelle extension proviennent-ils? extend
JPanel? extend JSplitPane? extend JDialog. N'y a-t-il pas moyen de le
faire aisement?



Merci de votre attention,



Ad


--
Hervé AGNOUX
http://www.diaam-informatique.com