如何通过我的应用程序捕获图像后调整位图的大小

时间:2016-06-20 09:55:00

标签: android bitmap

捕获图像并将其显示在活动中后,由于图像尺寸较大,它不会插入数据库。我需要知道如何压缩和减少图像大小和像素。

         try {
              //  Bitmap bitmap;
                BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();

                bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
                        bitmapOptions);

                imageView.setImageBitmap(bitmap);

                String path = android.os.Environment
                        .getExternalStorageDirectory()
                        + File.separator
                        + "Phoenix" + File.separator + "default";
                f.delete();
                OutputStream outFile = null;
                File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                try {
                    outFile = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
                    outFile.flush();
                    outFile.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();

3 个答案:

答案 0 :(得分:2)

   try {
          BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();

          bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
                        bitmapOptions);

          bitmap =getResizedBitmap(bitmap); 
          imageView.setImageBitmap(bitmap);


                String path = android.os.Environment
                        .getExternalStorageDirectory()
                        + File.separator
                        + "Phoenix" + File.separator + "default";
                f.delete();
                OutputStream outFile = null;
                File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                try {
                    outFile = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
                    outFile.flush();
                    outFile.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
            }

 public Bitmap getResizedBitmap(Bitmap myBitmap) {
        final int maxSize = 1024;
        int outWidth;
        int outHeight;
        int inWidth = myBitmap.getWidth();
        int inHeight = myBitmap.getHeight();
        if (inWidth > inHeight) {
            outWidth = maxSize;
            outHeight = (inHeight * maxSize) / inWidth;
        } else {
            outHeight = maxSize;
            outWidth = (inWidth * maxSize) / inHeight;
        }

        return Bitmap.createScaledBitmap(myBitmap, outWidth, outHeight, false);
    }

答案 1 :(得分:2)

答案在你的问题本身,

在您的代码位图中,压缩范围为85

   bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); 

您需要将其更改为25

   bitmap.compress(Bitmap.CompressFormat.JPEG, 25, outFile);

答案 2 :(得分:-2)

public static Bitmap decodeSampledBitmapFromResource(String imagePath,
        int reqWidth, int reqHeight) {
    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

    Uri uri = Uri.parse(imagePath);

    BitmapFactory.decodeFile(uri.getPath(), options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;

    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    options.inDither = true;
    return BitmapFactory.decodeFile(uri.getPath(), options);
}

private static int calculateInSampleSize(BitmapFactory.Options options,
        int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
        final int halfHeight = height / 2;
        final int halfWidth = width / 2;
        // Calculate the largest inSampleSize value that is a power of 2 and
        // keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 3;
        }
    }
    return inSampleSize;
}

试试这个