Renvoyer une image gif depuis une méthode
Question
Je crée une application en Java qui fera partie d'une application externe. Mon application contient une fenêtre qui montre des polygones et des choses comme ça. L’application externe doit obtenir l’image de la fenêtre au format gif. Pour cela, il appelle une méthode dans une interface (implémentée par mon application) et mon application renvoie l'image. L’application externe doit stocker l’image dans une base de données (ou quelque chose qui y est lié et dont je n’ai pas à me soucier).
Ma question est la suivante: - Quel doit être le type de conteneur de données de l'image lorsque mon application l'envoie à l'application externe? Je veux dire quel devrait être le type de retour de la méthode? Actuellement, ma classe d'encodage gif renvoie un tableau d'octets. Existe-t-il une autre "meilleure" option?
La solution
Un tableau d'octets peut être approprié si vous vous attendez à ce que les GIF soient petits, mais vous pouvez envisager d'utiliser un OutputStream
afin de pouvoir diffuser des bits plus efficacement.
Même si, aujourd’hui, vous ne renvoyiez qu’un ByteArrayOutputStream
entièrement rempli, cela vous permettrait de modifier votre implémentation à l’avenir sans affecter le code cilent.
Autres conseils
Un type de retour plus intuitif pourrait être java.awt.Image.
Voici quelques exemples: http://www.google.com/codesearch? q = java + gif + image & amp; hl = en & amp; btnG = Recherche + Code
Si votre 'application' appelle une méthode Java, elle doit comprendre les types de retour Java et vous devez renvoyer java.awt.image.
Si vous le faites via une procédure distante qui ne comprend pas les types Java, je renverrais un tableau d'octets et laisser l'application destinataire le décodage.
Je créerais deux méthodes:
- La première méthode crée l'image et retourne un
java.awt.Image
. Ici, vous pouvez mettre la partie de dessin de votre méthode. - La deuxième méthode crée une représentation gif du
java.awt.Image
comme demandé par l'application externe. Il devrait retournerOutputStream
comme déjà suggéré.