2012-03-14 15 views
1

私は画像を保存するbyte[]を持っています。JavaMEサイズ変更画像

今、私はそれを拡張し、別のbyte[]に保管できるようにしたいです。

私はBitmapの縮尺を知っていて、byte[]からBitmapに変換することができます。 しかし、スケールされたビットマップをbyte[]に戻すことはできません。

ブラックベリー EncodedImage thumbnail = image.scaleImageToFill(50, 50);は何もしません。 50×50のサムネイルを作成しようとしている

イム。正確ではありません。これはbyte []に​​格納されます。

は、どのように私はバイト[]に格納された画像のサイズを変更し、新しいバイト[]でそれを維持します。

byte[] imageTaken; 
//Create thumbnail from image taken 
EncodedImage image = EncodedImage.createEncodedImage(imageTaken, 0, -1); 
image.getBitmap(); 
EncodedImage thumbnail = image.scaleImageToFill(50, 50);   
byte[] thumbArray = thumbnail.getData(); 
+2

ここで答え:http://stackoverflow.com/questions/6650998/blackberry-getを-image-data-from-bitmap – rosco

+0

@rosco。ありがとうございますが、それはコードの別のJavaファイルを必要とします。おそらく以下の答えに似ています。プラスリンクが壊れています。 – Doomsknight

答えて

6

バイトにビットマップを変換後

bitmap = resizeImage(your image, 50,50); 


private static EncodedImage resizeImage(EncodedImage image, int width, int height) { 
     if (image == null) { 
      return image; 
     } 

     //return if image does not need a resizing 
     if (image.getWidth() <= width && image.getHeight() <= height) { 
      return image; 
     } 

     double scaleHeight, scaleWidth; 
     if (image.getWidth() > width && image.getHeight() > height) { //actual image is bigger than scale size 
      if (image.getWidth() > image.getHeight()) { //actual image width is more that height then scale with width 
      scaleWidth = width; 
      scaleHeight = (double)width/image.getWidth() * image.getHeight(); 
      } else { //scale with height 
      scaleHeight = height; 
      scaleWidth = (double)height/image.getHeight() * image.getWidth(); 
      } 
     } else if (width < image.getWidth()) { //scale with scale width or height 
      scaleWidth = width; 
      scaleHeight = (double)width/image.getWidth() * image.getHeight(); 
     } else { 
      scaleHeight = height; 
      scaleWidth = (double)height/image.getHeight() * image.getWidth(); 
     } 
     int w = Fixed32.div(Fixed32.toFP(image.getWidth()), Fixed32.toFP((int)scaleWidth)); 
     int h = Fixed32.div(Fixed32.toFP(image.getHeight()), Fixed32.toFP((int)scaleHeight)); 
     return image.scaleImage32(w, h); 
     } 

このコードを試してみてください -

JPEGEncodedImage encoder=JPEGEncodedImage.encode(bitmap,100); 
         byte[] array=encoder.getData(); 
         int length=array.length; 
         ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(length); 
         Base64OutputStream base64OutputStream = new Base64OutputStream(byteArrayOutputStream); 
         try{ 
             base64OutputStream.write(array, 0, length); 
             base64OutputStream.flush(); 
             base64OutputStream.close(); 


            } 
             catch (IOException ioe){ 
             //Dialog.alert("Error in encodeBase64() : "+ioe.toString()); 
             System.out.println("Error in encodeBase64() : "+ioe.toString()); 

            } 
            try { 
             byte[] data = Base64InputStream.decode(byteArrayOutputStream.toString()); 

            } catch (IOException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 
+0

これを 'byte []'に戻す方法は? – Doomsknight

+0

私は答えを更新しました。それを確認してください – Signare

+1

優れたもの、ありがとうございます。あなたのBitmaptoArrayを独自のメソッドに入れます。私の古いコードを使ってビットマップのサイズを変更しました。完璧に動作します。もう一度おねがいします:) – Doomsknight

関連する問題