Created
June 24, 2016 09:16
-
-
Save chittaranjan-khuntia/f9177d1698b6a80ff5b2ef2fdeaf0ef0 to your computer and use it in GitHub Desktop.
How to get optimal preview size of custom camera in Android
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Camera.Parameters parameters = mCamera.getParameters(); | |
List<Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes(); | |
Size mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes, width, height); | |
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { | |
final double ASPECT_TOLERANCE = 0.2; | |
double targetRatio = (double) w / h; | |
if (sizes == null) return null; | |
Size optimalSize = null; | |
double minDiff = Double.MAX_VALUE; | |
int targetHeight = h; | |
// Try to find an size match aspect ratio and size | |
for (Size size : sizes) { | |
double ratio = (double) size.width / size.height; | |
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; | |
if (Math.abs(size.height - targetHeight) < minDiff) { | |
optimalSize = size; | |
minDiff = Math.abs(size.height - targetHeight); | |
} | |
} | |
// Cannot find the one match the aspect ratio, ignore the requirement | |
if (optimalSize == null) { | |
minDiff = Double.MAX_VALUE; | |
for (Size size : sizes) { | |
if (Math.abs(size.height - targetHeight) < minDiff) { | |
optimalSize = size; | |
minDiff = Math.abs(size.height - targetHeight); | |
} | |
} | |
} | |
return optimalSize; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment