2011-06-17 4 views
0

Je consomme un service .NET json qui génère un tableau d'octets. L'octet octet est converti en la représentation entière de chaque octet. Lorsque vu dans Fiddler, il ressemble à ceci:Tableau binaire JSON à l'image en Java

{"imageBackground": [137,80,78,71,13,10,26,10,0,0,0,13,73,72,68, ...]}

En Java, j'ai récupéré les données dans un JSONObject, mais je ne suis pas familier avec Java, donc je ne suis pas sûr de savoir où aller pour le convertir en quelque chose d'utilisable. Je soupçonne que si je peux le réintégrer dans un flux quelconque, je devrais être capable de le rendre visible en tant qu'image (PNG/JPG/etc) ...

Des conseils sont disponibles ici?

+0

Je suis un peu perturbé par l'idée que quelqu'un envoie une image de cette façon en premier lieu. (Une chaîne JSON de données Base64'ed serait beaucoup mieux.) – Darien

Répondre

2

Get imageBackground comme un tableau d'octets, puis la transférer au ImageIO:

byte[] imageBackground = // set me here; 
ByteArrayInputStream input = new ByteArrayInputStream(imageBackground); 
try { 
    BufferedImage ImageIO.read(input); 
    // do fun stuff with the image... 
} 
finally { 
    input.close(); 
} 

Je ne suis pas sûr de ce que votre demande veut faire comme l'image, mais une fois que vous avez un BufferedImage vous pouvez utiliser ImageIO pour le convertir en un autre type, vous pouvez faire des transformations, la sortie vers un fichier ... le ciel est la limite. Vous pouvez trouver un tutoriel pour cela et plus par Google.

+0

Ahh la redoutée "une nouvelle réponse a été postée" popup, +1 – Andrew

+0

@Andrew Heh heh ... Je connais le sentiment. – stevevls

+0

Y at-il des fonctions java disponibles pour faciliter le retour de la chaîne de nombres entiers dans un octet []? – bugfixr

0

Quelque chose comme ça (les noms de méthodes sont probablement incorrectes, ne les connaissent pas du haut de ma tête)

JSONArray jBytes = theObject.getArray("imageBackground"); 
byte[] imData = new byte[jBytes.size()]; 
for (int i = 0; i < jBytes.size(); i++) { 
    imData[i] = jBytes.get(i); 
} 

Voilà comment vous faites un tableau réel d'octets. Ensuite, faites ce que stevevls posté, ou ce que vous voulez.