2016-06-17 12 views
2

サイズ制限なしでイメージをアップロードするアプリケーションが必要ですが、イメージサイズが1MBになるようにコードのサイズを変更します。私は多くの方法を試しましたが、私が上記の要件のためのコードを見つけることができませんでした。かつて、私はこれを試してみましたためにイメージサイズを1MBに縮小する方法

public void scaleDown() { 
    int width = stdImageBmp.getWidth(); 
    int height = stdImageBmp.getHeight(); 
    Matrix matrix = new Matrix(); 
    float scaleWidth = ((float) MAX_WIDTH)/width; 
    float scaleHeight = ((float) MAX_HEIGHT)/height; 


    matrix.postScale(scaleWidth, scaleHeight); 
    stdImageBmp = Bitmap.createBitmap(stdImageBmp, 0, 0, width, height, matrix, true); 

    File Image = new File("path"); 


    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    //compress bmp 
    stdImageBmp.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream); 
    byte[] byteArray = byteArrayOutputStream.toByteArray(); 


    imgViewStd.setImageBitmap(stdImageBmp); 
    Log.d("resizedBitmap", stdImageBmp.toString()); 

    width = stdImageBmp.getWidth(); 
    height = stdImageBmp.getHeight(); 
    System.out.println("imgWidth" + width); 
    System.out.println("imgHeight" + height); 
} 

答えて

4

結果の画像をビットマップのサイズを変更するために、このコードを使用することができますし、画像サイズ< 1メガバイトのために、私は480x640

public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) { 
     int width = bm.getWidth(); 
     int height = bm.getHeight(); 
     float scaleWidth = ((float) newWidth)/width; 
     float scaleHeight = ((float) newHeight)/height; 
     // CREATE A MATRIX FOR THE MANIPULATION 
     Matrix matrix = new Matrix(); 
     // RESIZE THE BIT MAP 
     matrix.postScale(scaleWidth, scaleHeight); 

     // "RECREATE" THE NEW BITMAP 
     return Bitmap.createBitmap(
       bm, 0, 0, width, height, matrix, false); 
    } 
+0

の使用解像度をお勧めしますわずかに**> ** 1MB:480 x 640 x 4 = 1228800バイトです。 –

+0

実際には480 x 640 x 3 = 921600バイト<1MB –

+0

いいえ、実際には480 x 640 x ** 4 **:R、G、B、** A **です。それは** 4 **バイトで、3ではありません。 –

関連する問題