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:
parent
957444735e
commit
1e8d3bb9f3
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user