Mon application BlackBerry doit extraire une image d'un service Web et afficher l'image sous forme de vignette. Quelqu'un peut-il me donner une idée sur la façon d'y parvenir?Afficher l'image mise à l'échelle sur BlackBerry
Répondre
Ce code peut vous aider à
connection = (HttpConnection) Connector.open(fullUrl.toString(),
Connector.READ_WRITE, true);
InputStream is = hc.openInputStream();
DataInputStream dis = new DataInputStream(is);
ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
int ch;
while ((ch = dis.read()) != -1) {
// System.out.println((char) ch);
// msg = msg + (char) ch;
bStrm.write(ch);
}
bb = bStrm.toByteArray();
Cela va générer Tableau d'octets à partir de votre URL de service Web. ici bb
est tableau d'octets.
Deux classes gèrent l'image dans BB. EncodedImage
et Bitmap
, les deux ont des constructeurs qui génèrent des images à partir d'un tableau d'octets. Je recommande d'utiliser Bitmap, il a une capacité de taille de l'image facile.
Je ne suis pas totalement familier avec BB mais comme personne d'autre ne répond à votre question, consultez la classe EncodedImage et la méthode scaleImage32() devrait vous renvoyer la version mise à l'échelle.
Merci pour la réponse .. je vais sûrement le vérifier :) – user469999
+1 et Thumbs up @petteri pour suggestion – Prasham
petteri a raison d'utiliser EncodedImage et scaleImage32(). Plus précisément, vous devez utiliser createEncodedImage(byte[] data, int offset, int length)
avec les octets renvoyés par le service Web. Sachez que scaleImage32 prend des arguments 'int', mais ce sont des nombres à virgule fixe, contrairement aux nombres à virgule flottante les plus connus. Pour obtenir la valeur de point fixe que vous voulez, utilisez les méthodes utilitaires dans Fixed32
Enfin, si vous n'avez pas besoin de l'image d'origine dans l'application BlackBerry, vous aurez une meilleure expérience globale si le webservice fait la mise à l'échelle. Cela réduira le nombre d'octets transférés sur l'appareil et réduira le calcul effectué sur l'appareil pour mettre à l'échelle l'image. La mise à l'échelle sur le serveur donnera probablement une image mise à l'échelle de meilleure qualité, car scaleImage32() utilise un algorithme assez basique.
Juste pour ajouter à la réponse de Michael, si vous ne pouvez pas mettre à l'échelle sur le serveur et devez le faire dans l'appareil, vous pouvez utiliser les API 5.0 pour faire une meilleure mise à l'échelle en utilisant Bitmap.scaleInto() –
Merci beaucoup ... j'essaierai sûrement la solution – user469999
Merci beaucoup ... je vais sûrement essayer la solution – user469999