package com.yeyupiaoling.teststadiometry; import android.graphics.Bitmap; import android.graphics.Matrix; import android.util.Size; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Utils { private static final String TAG = Utils.class.getName(); // 获取最优的预览图片大小 public static Size chooseOptimalSize(final Size[] choices, final int width, final int height) { final Size desiredSize = new Size(width, height); // Collect the supported resolutions that are at least as big as the preview Surface boolean exactSizeFound = false; float desiredAspectRatio = width * 1.0f / height; //in landscape perspective float bestAspectRatio = 0; final List bigEnough = new ArrayList(); for (final Size option : choices) { if (option.equals(desiredSize)) { // Set the size but don't return yet so that remaining sizes will still be logged. exactSizeFound = true; break; } float aspectRatio = option.getWidth() * 1.0f / option.getHeight(); if (aspectRatio > desiredAspectRatio) continue; //smaller than screen //try to find the best aspect ratio which fits in screen if (aspectRatio > bestAspectRatio) { if (option.getHeight() >= height && option.getWidth() >= width) { bigEnough.clear(); bigEnough.add(option); bestAspectRatio = aspectRatio; } } else if (aspectRatio == bestAspectRatio) { if (option.getHeight() >= height && option.getWidth() >= width) { bigEnough.add(option); } } } if (exactSizeFound) { return desiredSize; } if (bigEnough.size() > 0) { final Size chosenSize = Collections.min(bigEnough, new Comparator() { @Override public int compare(Size lhs, Size rhs) { return Long.signum( (long) lhs.getWidth() * lhs.getHeight() - (long) rhs.getWidth() * rhs.getHeight()); } }); return chosenSize; } else { return choices[0]; } } public static Bitmap rotateBitmap(Bitmap bitmap, int angle) { Matrix matrix = new Matrix(); matrix.postRotate(angle); return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); } public static List bisectionBitmap(Bitmap bitmap) { List bitmapList = new ArrayList<>(); Bitmap left = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth() / 2, bitmap.getHeight(), null, true); bitmapList.add(left); Bitmap right = Bitmap.createBitmap(bitmap, bitmap.getWidth() / 2, 0, bitmap.getWidth() / 2, bitmap.getHeight(), null, true); bitmapList.add(right); return bitmapList; } }