将位图的大小减小到Android中的某个指定像素

我想将我的位图图像大小减少到最大640px。 例如,我有大小为1200 x 1200像素的位图图像。如何将其缩小为640像素。

如果您传递位图widthheight使用:

 public Bitmap getResizedBitmap(Bitmap image, int bitmapWidth, int bitmapHeight) { return Bitmap.createScaledBitmap(image, bitmapWidth, bitmapHeight, true); } 

如果要保持位图比率相同,但将其减小到最大边长,请使用:

 public Bitmap getResizedBitmap(Bitmap image, int maxSize) { int width = image.getWidth(); int height = image.getHeight(); float bitmapRatio = (float) width / (float) height; if (bitmapRatio > 1) { width = maxSize; height = (int) (width / bitmapRatio); } else { height = maxSize; width = (int) (height * bitmapRatio); } return Bitmap.createScaledBitmap(image, width, height, true); } 

使用此方法

  /** getResizedBitmap method is used to Resized the Image according to custom width and height * @param image * @param newHeight (new desired height) * @param newWidth (new desired Width) * @return image (new resized image) * */ public static Bitmap getResizedBitmap(Bitmap image, int newHeight, int newWidth) { int width = image.getWidth(); int height = image.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 Bitmap resizedBitmap = Bitmap.createBitmap(image, 0, 0, width, height, matrix, false); return resizedBitmap; } 

或者你可以这样做:

 Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter); 

传递filter = false将导致块状像素化图像。

传递filter = true将为您提供更平滑的边缘。

这是将位图图像分辨率(像素)降低到所需值的工作代码…

 import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ImageView; import android.widget.Toast; public class ImageProcessActivity extends AppCompatActivity { private static final String TAG = "ImageProcessActivity"; private static final String IMAGE_PATH = "/sdcard/DCIM/my_image.jpg"; public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { 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 *= 2; } } return inSampleSize; } public static Bitmap decodeSampleDrawableFromFile(String file, int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(file, options); // Calculate inSampleSize options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(file, options); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_process); new AsyncTask() { @Override protected Bitmap doInBackground(Object... objects) { try { return decodeSampleDrawableFromFile(IMAGE_PATH, 640, 640); } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); ((ImageView) findViewById(R.id.img)).setImageBitmap(bitmap); } }.execute(); } } 

脚步:

  1. 获取Bitmap.Options (图片信息)。

  2. 将样本大小调整为所需的样本大小。

  3. 使用给定选项(所需分辨率)从图像文件加载bitmap对象。 但是在后台线程中执行此操作。

  4. 在UI线程( onPostExecute()onPostExecute() Bitmap图像加载到ImageView