Sto cercando di catturare le foto direttamente utilizzando l'API della fotocamera, ma questa è l'anteprima che ho ottenuto: Android: foto scattata è più grande l'anteprima
& questa è l'immagine presa dopo aver chiamato takePicture()
che è più grande di quanto l'anteprima in sé:
(nota: ho ritagliato l'altezza delle precedenti 2 foto per migliorare la leggibilità domanda, & mantenuto la larghezza è)
Sto usando questo metodo di utilità per scegliere meglio dimensione ottimale anteprima prima di avviare la macchina fotografica anteprima:
public static Camera.Size getBestAspectPreviewSize(int displayOrientation,
int width,
int height,
Camera.Parameters parameters) {
double targetRatio = (double) width/height;
Camera.Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
if (displayOrientation == 90 || displayOrientation == 270) {
targetRatio = (double) height/width;
}
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
Collections.sort(sizes,
Collections.reverseOrder(new SizeComparator()));
for (Camera.Size size : sizes) {
double ratio = (double) size.width/size.height;
if (Math.abs(ratio - targetRatio) < minDiff) {
optimalSize = size;
minDiff = Math.abs(ratio - targetRatio);
}
if (minDiff < 0.0d) {
break;
}
}
return (optimalSize);
}
& questo metodo per scegliere un adeguato dimensioni dell'immagine:
public static Camera.Size getBiggestSafePictureSize(Camera.Parameters parameters) {
Camera.Size result = null;
long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
long availableMemory = Runtime.getRuntime().maxMemory() - used;
for (Camera.Size size : parameters.getSupportedPictureSizes()) {
int newArea = size.width * size.height;
long neededMemory = newArea * 4 * 4; // newArea * 4 Bytes/pixel * 4 needed copies of the bitmap (for safety :))
if (neededMemory > availableMemory)
continue;
if (result == null) {
result = size;
} else {
int resultArea = result.width * result.height;
if (newArea > resultArea) {
result = size;
}
}
}
return (result);
}
& questo è il elemento anteprima fotocamera nel layout:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/cameraPreview"></FrameLayout>
& Sto seguendo the official documentation per creare l'anteprima della fotocamera stessa
Quindi, come forzare l'anteprima della fotocamera per mostrare la foto esatta che verrà scattata?
sembra un'informazione inestimabile qui! – Fattie