Meine App öffnet die Kamera mit Oberflächenhalter. Die Kamera wird mit einer Standardvorschaugröße geöffnet. Auf bestimmten Geräten erfasst die Standardvorschaugröße mehr Bilder als tatsächlich auf dem Bildschirm sichtbar ist. Um dies zu vermeiden, habe ich angefangen, die Vorschaugröße selbst einzustellen. Kriterium ist, die Vorschaugröße aus der verfügbaren Größenliste auszuwählen, die der Breite des Bildschirms am nächsten kommt.Android Kamera Vorschau Größe Problem
Dies funktioniert die meiste Zeit gut. Aber oft stolpere ich über wenige Geräte, die die von mir gewählte Vorschaugröße nicht mögen.
1) Nexus 4 hat das Bild für eine der ausgewählten Vorschaugrößen nicht aufgenommen. 2) Samsung S 4 gibt ein Band von Linien (Rauschen) entlang der aufgenommenen Bilder.
Also wollte ich verstehen, ob ich etwas gegen den Standard mache. Hier sind meine Fragen: -
1) Ich benutze Oberflächenhalter, um die Kamera zu öffnen. Gibt es eine andere Möglichkeit, die Kamera-Hardware in meiner App zu verwenden.
2) Ich wähle die Vorschaugröße aus der Liste der verfügbaren Größen. Gibt es eine bestimmte, nach der ich suchen sollte, bevor ich irgendeine Größe auswähle? Logik für die Auswahl der Größe wird im Folgenden erwähnt: -
private Camera.Size getBestPreviewSize(int width, int height)
{
List<Size> sizes = camera.getParameters().getSupportedPreviewSizes();
if (sizes == null) return null;
Size optimalSize = null;
double minDiff = Double.MAX_VALUE;
int targetHeight = height;
int targetWidth = width;
int minWidthDiff = 0;
if (optimalSize == null) {
minDiff = Double.MAX_VALUE;
for (Size size : sizes) {
if (Math.abs(size.width - targetWidth) < minDiff) {
if(size.width > width) {
if (minWidthDiff == 0) {
minWidthDiff = size.width - width;
optimalSize = size;
}
else if (Math.abs(size.width - targetWidth) < minWidthDiff) {
minWidthDiff = size.width - width;
optimalSize = size;
}
minDiff = Math.abs(size.width - targetWidth);
}
}
}
}
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;
}
Alle Richtungen auf diese wird wirklich helfen.
Danke !! Gagan