2016-10-08 8 views
1

私は20MBのサイズの画像を持っていると仮定し、15Mbの最大サイズまで縮小する必要があります。これをどのように達成するのですか?ImageResize for android sample

以外のapiは見つかりませんcreateScaledBitmap画像の高さと幅だけを取りますが、目標サイズはありません。

どうすればこの問題を解決できますか?私は盲目的に幅と高さを変えて、< =目標サイズになるまで続けなければならないのでしょうか?

助けてください。次のように

答えて

0

のGraphics2Dは、画像リサイズ機能を提供している:

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); 
Graphics2D g = resizedImage.createGraphics(); 
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
g.dispose(); 

あなたが再サイズの画像品質を向上したい場合は、いくつかの記事によると、あなたはたRenderingHintsなどを追加することができます次の:

BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); 
Graphics2D g = resizedImage.createGraphics(); 
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
g.dispose(); 
g.setComposite(AlphaComposite.Src); 
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY); 
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 

全例利用可能http://www.mkyong.com/java/how-to-resize-an-image-in-java/

+0

私はいつも静的** IMG_WIDTH、IMG_HEIGHT **の値を述べるべきですか?これを行うには? –

+0

はい。あなたは –

0

あなたは他のように、このlink

は限り私はあなたがBitmap

+0

私はこのリンクをチェックしましたが、以前のアドバイスでの私のコメントのように、このリンクでも** DESIRED_WIDTH、DESIRED_HEIGHT **値があることが示唆されています。しかし、私の場合は目標サイズがありますが、幅と高さには特別な制限はありません。 –

0

使用して画像

// Draw Bitmap on Canvas 
public void setBitmap(String imageUrl){ 

    Bitmap myBitmap = BitmapFactory.decodeFile(imageUrl); 

    Bitmap scaleBitmap = null; 
    int bWidth = myBitmap.getWidth(); 
    int bHeight = myBitmap.getHeight(); 
    int diff = 0; 

    Log.d(TAG, "bitmapWidth = " + bitmapWidth + " bitmapHeight = " + bitmapHeight); 

    Log.d(TAG, "bWidth = " + bWidth + " bHeight = " + bHeight); 

    if(bWidth >= bHeight){ 

     if(bWidth > bitmapWidth){ 

      // landscape 
      float ratio = (float) bWidth/bitmapWidth; 
      diff = bWidth - bitmapWidth; 
      bHeight = (int)(bHeight/ratio); 
      scaleBitmap = Bitmap.createScaledBitmap(myBitmap, bWidth - diff, bHeight, false); 
     } 
     else{ 

      scaleBitmap = myBitmap; 
     } 
    } 
    else{ 

     if(bHeight > bitmapHeight){ 

      float ratio = (float) bHeight/bitmapHeight; 
      diff = bHeight - bitmapHeight; 
      bWidth = (int)(bWidth/ratio); 
      scaleBitmap = Bitmap.createScaledBitmap(myBitmap, bWidth, bHeight - diff, false); 
     } 
     else{ 

      scaleBitmap = myBitmap; 
     } 
    } 



    canvasBitmap = scaleBitmap; 
    invalidate(); 

} 

のサイズを変更するため、このコードは、画像サイズやファイルサイズを縮小知っているように矢印を上げるか確認しましたイメージのサイズを変更するためのリンクも取得できます。

+0

** bitmapWidthとbitmapHeight **の初期値はどこですか? –