9
0
mirror of https://gitee.com/shuto/customCamera.git synced 2024-10-06 10:22:07 +08:00

Modification des noms de variables.

Fix bug:
  - Etirement preview : On determine la meilleure resolution de la camera parmi celles disponibles et en fonction de la taille de la preview.
This commit is contained in:
Thomas BOY 2015-02-10 11:06:39 +01:00
parent 957444735e
commit 1e8d3bb9f3
2 changed files with 81 additions and 10 deletions

View File

@ -101,7 +101,7 @@ public class CameraActivity extends Activity {
// The zoom bar progress
final SeekBar zoomLevel = (SeekBar) findViewById(R.id.zoomLevel);
final Camera.Parameters paramsCamera = customCamera.getParameters();
Camera.Parameters paramsCamera = customCamera.getParameters();
if (paramsCamera.isZoomSupported()) {
final int zoom = paramsCamera.getZoom();
int maxZoom = paramsCamera.getMaxZoom();
@ -111,9 +111,10 @@ public class CameraActivity extends Activity {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue,
public void onProgressChanged(SeekBar seekBar, int progressValue,
boolean fromUser) {
progress = progresValue;
Camera.Parameters paramsCamera = ManagerCamera.getCurrentCameraResource().getParameters();
progress = progressValue;
int newZoom = (int) (zoom + progress);
zoomLevel.setProgress(newZoom);
paramsCamera.setZoom(newZoom);
@ -228,36 +229,40 @@ public class CameraActivity extends Activity {
RelativeLayout.LayoutParams paramsCameraPreview =
new RelativeLayout.LayoutParams(cameraPreview.getLayoutParams());
Size camParameters = customCamera.getParameters().getPictureSize();
Size camParametersSize = customCamera.getParameters().getPictureSize();
int minSize = Math.min(camParameters.width, camParameters.height);
int maxSize = Math.max(camParameters.width, camParameters.height);
int minSize = Math.min(camParametersSize.width, camParametersSize.height);
int maxSize = Math.max(camParametersSize.width, camParametersSize.height);
int widthScreen = dm.widthPixels;
int heightScreen = dm.heightPixels;
int marginLeft = 0;
int marginTop = 0;
float ratioWidth, ratioHeight, sizeToResize;
float ratioWidth, ratioHeight, sizeToResize, sizeToResizeMatchParent;
if (widthScreen > heightScreen) {
ratioWidth = ((float)maxSize / (float)widthScreen);
ratioHeight = ((float)minSize / (float)heightScreen);
sizeToResize = ratioWidth > ratioHeight ? minSize : maxSize;
sizeToResizeMatchParent = ratioWidth > ratioHeight ? maxSize : minSize;
} else {
ratioWidth = ((float)minSize / (float)widthScreen);
ratioHeight = ((float)maxSize / (float)heightScreen);
sizeToResize = ratioWidth > ratioHeight ? maxSize : minSize;
sizeToResizeMatchParent = ratioWidth > ratioHeight ? minSize : maxSize;
}
if (ratioWidth > ratioHeight) {
paramsCameraPreview.height = (int)(sizeToResize / ratioWidth);
paramsCameraPreview.width = LayoutParams.MATCH_PARENT;
paramsCameraPreview.width = (int)(sizeToResizeMatchParent / ratioWidth);
marginTop = (int)(((float)(heightScreen - paramsCameraPreview.height)) / 2);
} else {
paramsCameraPreview.height = LayoutParams.MATCH_PARENT;
paramsCameraPreview.height = (int)(sizeToResizeMatchParent / ratioHeight);
paramsCameraPreview.width = (int)(sizeToResize / ratioHeight);;
marginLeft = (int)(((float)(widthScreen - paramsCameraPreview.width)) / 2);
}
paramsCameraPreview.setMargins(marginLeft, marginTop, 0, 0);
cameraPreview.setLayoutParams(paramsCameraPreview);
setPreviewSize();
// Assign the render camera to the view
CameraPreview myPreview = new CameraPreview(this, customCamera);
cameraPreview.addView(myPreview);
@ -962,7 +967,6 @@ public class CameraActivity extends Activity {
}
protected void setFlashMode() {
ImageButton flash = (ImageButton)findViewById(R.id.flash);
if (hasFlash()) {
String mode = Camera.Parameters.FLASH_MODE_OFF;
switch(stateFlash) {
@ -1013,7 +1017,26 @@ public class CameraActivity extends Activity {
initCameraResource(oppositeCamera);
FrameLayout cameraPreview = (FrameLayout) findViewById(R.id.camera_preview);
cameraPreview.removeAllViews();
setPreviewSize();
CameraPreview myPreview = new CameraPreview(this, customCamera);
cameraPreview.addView(myPreview);
}
/**
* To set the size of the preview.
*/
private void setPreviewSize() {
FrameLayout cameraPreview = (FrameLayout) findViewById(R.id.camera_preview);
RelativeLayout.LayoutParams paramsCameraPreview =
new RelativeLayout.LayoutParams(cameraPreview.getLayoutParams());
Size optimalSize;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
optimalSize = ManagerCamera.getOptimalPreviewSize(paramsCameraPreview.width, paramsCameraPreview.height);
} else {
optimalSize = ManagerCamera.getOptimalPreviewSize(paramsCameraPreview.height, paramsCameraPreview.width);
}
Camera.Parameters camParameters = customCamera.getParameters();
camParameters.setPreviewSize(optimalSize.width, optimalSize.height);
customCamera.setParameters(camParameters);
}
}

View File

@ -1,5 +1,7 @@
package org.geneanet.customcamera;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
@ -194,4 +196,50 @@ public class ManagerCamera {
public static Camera getCurrentCameraResource() {
return ManagerCamera.mCamera;
}
/**
* Get the optimal preview size.
* based on http://stackoverflow.com/questions/19577299/android-camera-preview-stretched
*
* @param int w Width of the wanted preview.
* @param int h Height of the wanted preview.
*
* @return Camera.Size Optimal resolution.
*/
public static Camera.Size getOptimalPreviewSize(int w, int h) {
if (ManagerCamera.mCamera == null) {
return null;
}
List<Camera.Size> sizes = ManagerCamera.mCamera.getParameters().getSupportedPreviewSizes();
if (sizes == null) {
return null;
}
final double ASPECT_TOLERANCE = 0.1;
double targetRatio = (double)h / w;
Camera.Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = h;
for (Camera.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);
}
}
if (optimalSize == null) {
for (Camera.Size size : sizes) {
if (Math.abs(size.height - targetHeight) < minDiff) {
optimalSize = size;
minDiff = Math.abs(size.height - targetHeight);
}
}
}
return optimalSize;
}
}