2009-12-08 21 views
2

Ma condition est comme celle-ci. J'ai besoin de lire un fichier à partir du téléphone portable en utilisant une connexion de fichier, créer une vignette de cette image et poster sur le serveur. Je suis capable de lire l'image en utilisant l'API FileConnection, et aussi capable de créer la vignette. Après la création de la vignette, je ne trouve pas de méthode pour convertir cette image en octet []. C'est possible?Comment puis-je convertir une image en tableau d'octets dans J2ME?

code

pour la conversion des vignettes:

private Image createThumbnail(Image image) { 
     int sourceWidth = image.getWidth(); 
     int sourceHeight = image.getHeight(); 

     int thumbWidth = 128; 
     int thumbHeight = -1; 

     if (thumbHeight == -1) 
      thumbHeight = thumbWidth * sourceHeight/sourceWidth; 

     Image thumb = Image.createImage(thumbWidth, thumbHeight); 
     thumb.getGraphics(); 
     Graphics g = thumb.getGraphics(); 

     for (int y = 0; y < thumbHeight; y++) { 
      for (int x = 0; x < thumbWidth; x++) { 
       g.setClip(x, y, 1, 1); 
       int dx = x * sourceWidth/thumbWidth; 
       int dy = y * sourceHeight/thumbHeight; 
       g.drawImage(image, x - dx, y - dy); 
      } 
     } 

     Image immutableThumb = Image.createImage(thumb); 

     return thumb; 
    } 
+0

Vous devez afficher du code sur la conversion de vignettes. Quel type d'objet êtes-vous avec? Quelle API J2ME/3rd party utilisez-vous? – roryf

Répondre

2

Image.getRGB() de MIDP2.0 est votre ami. Vous pouvez obtenir les données de pixels ARVB comme un tableau int comme suit:

int w = theImage.getWidth(); 
int h = theImage.getHeight(); 
int[] argb = new int[w * h]; 
theImage.getRGB(argb, 0, w, 0, 0, w, h); 

Le tableau int peut alors être utilisé comme paramètre à Image.createRGBImage(), ou bureau Java, BufferedImage peut être utilisé comme suit:

BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 
img.setRGB(0, 0, w, h, ints, 0, w); 
+0

pour le téléchargement de l'image sur le serveur, j'ai besoin de convertir ce tableau int argb en byte array.i peut le faire avec ce code ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = nouveau DataOutputStream (baos); pour (int i = 0; i Sanal

+1

Si vous: deserialize le tableau d'octets correctement, Reconstituez le groupe int, transmettent la largeur et la hauteur de l'image au serveur, puis tenter de créer l'image comme le suggère, vous devriez pouvoir pour enregistrer l'image dans le format que vous voulez. – funkybro