0

写真を拡大縮小してみましたが、最初はうまくいきましたが、縮小するとうまくいかないようです。しばらくすると、縮小が止まります。品質 0 でバイト数を 630 未満にすることはできません。任意のアイデアをいただければ幸いです。

    ByteArrayOutputStream out;
    Bitmap bitmap = BitmapFactory.decodeStream(in);
    int width = bitmap.getWidth(); //3920
    int height = bitmap.getHeight(); //2204

    float scale = 0.0034; //usually calculated in runtime but set for simplicity now.

    // Resize the bitmap
    Matrix matrix = new Matrix();
    matrix.postScale(scale, scale);

    // Recreate the new bitmap
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);

    out = new ByteArrayOutputStream();
    resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 0, out);

    return out.toByteArray();
4

2 に答える 2

0

BitmapFactory.Options.InSampleSize を確認してください

このコードは、ファイルに保存されているビットマップを縮小しますが、コードをメモリ内ビットマップに適応させるのは簡単なはずです

 public static Bitmap getReducedBitmap(Context context, String path) {    
    File bitmapFile = new File(path);

    Uri uri = Uri.fromFile(bitmapFile);
    InputStream in = null;

    ContentResolver contentResolver = context.getContentResolver();

    try {
      in = contentResolver.openInputStream(uri);

      // Decode image size
      BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      BitmapFactory.decodeStream(in, null, options);
      in.close();

      //scale works better with powers of 2
      int scale = 1;
      while ((options.outWidth * options.outHeight) * (1 / Math.pow(scale, 2)) > WSConfig.PICTURE_MAX_PIXELS) {
        scale++;
      }

      Bitmap reducedBitmap = null;
      in = contentResolver.openInputStream(uri);
      if (scale > 1) {
        // scale to max possible inSampleSize that still yields an image
        // larger than target
        options = new BitmapFactory.Options();
        options.inSampleSize = scale;
        reducedBitmap = BitmapFactory.decodeStream(in, null, options);    
      } else {
        reducedBitmap = BitmapFactory.decodeStream(in);
      }
      in.close();

      return reducedBitmap;
    } catch (IOException e) {
      Log.e("UTILS", e.getMessage(), e);
      return null;
    }
  }

私の MAX_PICTURE_PICTURES は最大解像度を決定します

于 2013-11-04T11:46:58.403 に答える