Würde jemand wissen, wo die ISO-Einstellung für die Kamera aus dem Android SDK zu steuern? Es sollte möglich sein, da die native Kamera-Anwendung auf dem HTC Desire ISO-Einstellungen hat.Android Kamera API ISO-Einstellung?
Antwort
Verzeihen Sie meine Unwissenheit, aber wie ist das anders als "Belichtungskorrektur" über setExposureCompensation() eingestellt? Wikipedia enthält einige der Umwandlungsformeln, die Sie möglicherweise nützlich finden.
Sie flatten()
einen Blick auf die Methoden nehmen sollte, unflatten()
, get(String key)
, set(String key, String value)
in android.hardware.Camera.Parameters
. Beachten Sie auch die source code of that class. Es könnte die Dinge klarer machen.
Zuerst müssen Sie die Camera.Parameters
erhalten. Unflatten Sie es auf String
und untersuchen Sie es. Ich entwickle auf einem HTC Desire als auch eine der folgenden String
erhalten:
sharpness-max=30;zoom=0;taking-picture-zoom=0;zoom-supported=true;sharpness-min=0;sharpness=10;contrast=5;whitebalance=auto;jpeg-quality=100;preview-format-values=yuv420sp;jpeg-thumbnail-quality=75;preview-format=yuv420sp;preview-size=640x480;focal-length=3.53;iso=auto;meter-mode=meter-center;front-camera-mode=mirror;flash-mode-values=off,auto,on,torch;preview-frame-rate-values=15;preview-frame-rate=15;focus-mode-values=auto,infinity;jpeg-thumbnail-width=640;jpeg-thumbnail-size-values=640x480,512x384,384x288,0x0;zoom-ratios=100,114,131,151,174,200;saturation-def=5;preview-size-values=1280x720,800x480,768x432,720x480,640x480,576x432,480x320,400x240,384x288,352x288,320x240,272x272,240x240,240x160,176x144,160x120;smart-contrast=off;picture-size-values=2592x1952,2592x1456,2592x1936,2592x1728,2592x1552,2048x1536,2048x1360,2048x1216,2048x1152,1600x1200,1584x1056,1280x960,1280x848,1280x768,1280x720,1024x768,640x480,640x416,640x384,640x368,512x384,400x400,272x272;contrast-min=0;min-exposure-compensation=-4;brightness-min=0;antibanding=auto;taking-picture-zoom-min=0;saturation-min=1;contrast-max=10;vertical-view-angle=42.5;taking-picture-zoom-max=21;contrast-def=5;brightness-max=6;horizontal-view-angle=54.8;brightness=3;jpeg-thumbnail-height=480;cam-mode=0;focus-mode=auto;sharpness-def=10;front-camera-mode-values=mirror,reverse;picture-format-values=jpeg;saturation-max=10;max-exposure-compensation=4;exposure-compensation=0;exposure-compensation-step=0.5;flash-mode=off;effect-values=none,mono,negative,solarize,sepia,posterize,aqua;meter-mode-values=meter-average,meter-center,meter-spot;picture-size=2592x1952;max-zoom=5;effect=none;saturation=5;whitebalance-values=auto,incandescent,fluorescent,daylight,cloudy-daylight;picture-format=jpeg;brightness-def=3;iso-values=auto,deblur,100,200,400,800,1250;enable-caf=off;antibanding-values=off,50hz,60hz,auto
Also im Grunde ein Schlüssel iso-values
genannt ist die unterstützten Werte und einen Schlüssel iso
, die den aktuellen Wert hält abzurufen.
Sie folgendes tun:
Camera cam = Camera.open();
Camera.Parameters camParams = cam.getParameters();
String supportedIsoValues = camParams.get("iso-values"); //supported values, comma separated String
camParams.set("iso", (String)newValue);
cam.setParameters(camParams);
Und mit Bezug auf die abgeflachte Parameter würde ich davon ausgehen, dass es einen Unterschied zwischen den Iso und Einstellungen für die Belichtungskorrektur.
parameters.get ("ISO-Werte") gibt NULL auf einem HTC Desire zurück. Irgendwelche anderen Ideen? – radhoo
@radhoo Desire sollte ISO unterstützen. Siehe meine Antwort unten, um eine Liste der gültigen ISO-Werte (und der Schlüsselwörter) von camera.parameters.flatten() abzurufen. –
Szias Antwort ist korrekt.
Nur
String supportedIsoValues = camParams.get("iso-values");
kehrt null auf einigen Geräten.
Dennoch können Sie die ISO-Set von
Camera cam = Camera.open();
Camera.Parameters camParams = cam.getParameters();
camParams.set("iso", "400"); // values can be "auto", "100", "200", "400", "800", "1600"
cam.setParameters(camParams);
Ich weiß nicht, ob „800“ oder „1600“ auf allen Geräten unterstützt wird
können Sie überprüfen, was Sie von
tatString newVAlue = camParams.get("iso");
Zur Verweisung, auf meinen zwei Telefonen (beide Samsung-Modelle), die annehmbaren Werte sind vorangestellt "ISO", und 800 ist auf einem aber nicht beiden verfügbar, während keiner 1600 unterstützt. – Jules
Bis jetzt (KK 4.4.2) Android hat keine offiziellen APIs, um ISO zu verwalten.
Das ISO-Management ist eine völlig vom Gerät abhängige Angelegenheit, und 8/18 Geräte, die ich bisher getestet habe, unterstützen überhaupt keine ISO-Einstellungen.
Untersuchen Sie Camera.getParameters().flatten()
String, um gültige Schlüsselwörter zu überprüfen, jedes Gerät kann andere Schlüsselwörter verwenden !!
Die meisten Geräte „iso-Werte“ Schlüsselwort verwenden eine durch Kommata getrennte Liste-of-möglich-Werte zu verwenden, mit „iso“ Schlüsselwort, wie diese zu definieren:
param.set("iso", valid_value_from_list);
einige andere Geräte verwendet „iso-Modus -values "und" iso "Schlüsselwörter (Galaxy Nexus).
Ich habe auch ein Gerät gefunden, das "iso-speed-values" und "iso-speed" (Micromax A101) verwendet.
Eine andere, die mich traurig machen ist "nv-Bild-Iso-Werte" -> "nv-Bild-iso" (LG Dual P990).
Folgen Sie szia beantworten, wie diese Schlüsselwörter verwenden.
Hier einige Code, den ich verwende, um eine Liste der gültigen Werte erhalten bekannte Schlüsselwörter:
String flat = param.flatten();
String[] isoValues = null;
String values_keyword=null;
String iso_keyword=null;
if(flat.contains("iso-values")) {
// most used keywords
values_keyword="iso-values";
iso_keyword="iso";
} else if(flat.contains("iso-mode-values")) {
// google galaxy nexus keywords
values_keyword="iso-mode-values";
iso_keyword="iso";
} else if(flat.contains("iso-speed-values")) {
// micromax a101 keywords
values_keyword="iso-speed-values";
iso_keyword="iso-speed";
} else if(flat.contains("nv-picture-iso-values")) {
// LG dual p990 keywords
values_keyword="nv-picture-iso-values";
iso_keyword="nv-picture-iso";
}
// add other eventual keywords here...
if(iso_keyword!=null) {
// flatten contains the iso key!!
String iso = flat.substring(flat.indexOf(values_keyword));
iso = iso.substring(iso.indexOf("=")+1);
if(iso.contains(";")) iso = iso.substring(0, iso.indexOf(";"));
isoValues = iso.split(",");
} else {
// iso not supported in a known way
}
Sollte iso_keyword nicht "iso-mode" statt sein "iso" für google galaxy nexus keywords? – Thracian
da ich das gleiche Problem zu finden, hatte, wenn das Gerät einen ISO
Parameter hat ich an dieser Antwort sah https://stackoverflow.com/a/23567103/3976589 und Säge dass @jc das Problem für 8/18 Geräte gelöst hat, indem es einige Parameter aufgelistet hat, die er auf verschiedenen Geräten gefunden hat. Basierend auf dieser Auflistung fand ich, dass jeder Parameter die Wörter iso
und values
(manchmal nur diese Wörter, manchmal etwas zusätzliches) enthält.
Also wenn ich alle Kameraparameter auflisten und nach Strings suchen, die beide Wörter enthalten, weiß ich, wie der Name des ISO
-Parameters ist, falls er existiert. Außerdem kann ich, wenn der Parameter existiert, die unterstützten ISO
Werte verwenden und wenn ich einen dieser Werte einstellen möchte, dh den Kameraparameter ändern, kann ich einfach den -values
am Ende des iso-values
Parameters entfernen und dann kann ich den ISO
Wert erfolgreich ändern .
Ich werde jetzt meinen Code für diese Aufgabe teilen. Zuerst ein Ausschnitt, der eine Liste mit unterstützten Werten ISO
abruft.
private String ISOValuesParameter = null;
private String ISOParameter = null;
private String ISOValues = null;
private void initCamera() {
Camera mCamera = Camera.open();
// this will list supported values
String ISOvalues = getISOValues();
textViewISO = (TextView) findViewById(R.id.viewISO);
textViewISO.setText(ISOvalues);
// setting Minimum ISO value
if(ISOValuesParameter != null) {
Camera.Parameters params = mCamera.getParameters();
ISOParameter = ISOValuesParameter.replace("-values", "");
params.set(ISOParameter, getMinISO());
mCamera.setParameters(params);
// get the updated ISO value
params = mCamera.getParameters();
String ISO = params.get(ISOParameter);
Toast.makeText(this,"ISO set to: " + ISO, Toast.LENGTH_SHORT).show();
}
}
// returns a list with supported ISO values
private String getISOValues() {
ISOValuesParamter = getISOValuesParameter();
Camera.Parameters params = mCamera.getParameters();
ISOValues = params.get(ISOValuesParamter);
return ISOValues!=null ? ISOValues : "ISO not supported";
}
// this will return the name of the ISO parameter containing supported ISO values
private String getISOValuesParameter() {
Camera.Parameters params = mCamera.getParameters();
String flatten = params.flatten();
String[] paramsSeparated = flatten.split(";");
for(String cur : paramsSeparated) {
if(cur.contains("iso") && cur.contains("values")) {
return cur.substring(0,cur.indexOf('='));
}
}
return null;
}
Dieser Code-Schnipsel nur listet die unterstützten ISO
Werte. In meiner Anwendung musste ich die niedrigste ISO auswählen. Hier ist meine Lösung:
private String getMinISO() {
if(ISOValues == null) {
return null;
}
String[] ISOarray = ISOValues.split(",");
Arrays.sort(ISOarray, myComparator);
String minISO = ISOarray[ISOarray.length-1];
return minISO;
}
Hier myComparator
ist eine Klasse, die in absteigender Reihenfolge zwei Strings und sortiert das Array vergleicht. Alle Buchstaben sind am Anfang und alle Zahlen sind am Ende. Hier ist meine Implementierung:
// Singelton class
public class MyComparator implements Comparator<String> {
private static MyComparator myComparator = null;
private MyComparator() {}
@Override
public int compare(String a, String b) {
return compareString(a,b);
}
public static int compareString(String a, String b) {
if (a.length() > b.length())
return -1;
if (a.length() == b.length()) {
if (a.compareTo(b) > 0)
return -1;
else if (a.compareTo(b) == 0)
return 0;
}
return 1;
}
public static synchronized MyComparator getInstance() {
if(myComparator==null) {
myComparator = new MyComparator();
}
return myComparator;
}
}
Ich hoffe, meine Antwort hilft anderen Menschen. :)
Prost! @ ee3509
- 1. Schalten Kamera-Licht in Android API 22
- 2. android kamera api und QR code
- 3. Kamera-API 2 Vorschau in Fragmente android
- 4. Android Kamera API App stürzt bei onResume
- 5. Android Kamera 2 api BufferQueue wurde aufgegeben
- 6. Android Kamera (Taschenlampe) API zu langsam
- 7. Kamera-API: Quer Gerät gibt
- 8. Objekterkennung auf Android-Kamera
- 9. Android Kamera, onPictureTaken (byte [] imgData, Kamera Kamera) Methode & PictureCallback nie
- 10. Android 2.2. Portrait Kamera Vorschau
- 11. Android API zum Erkennen neuer Medien von eingebauter Kamera & Mikrofon
- 12. Instabile Kamera Verhalten auf Android
- 13. iPhone Kamera-API und Zoom
- 14. Android Emulator 4.2 (API Level 17) "Leider Kamera hat aufgehört" Wenn versuchen, Kamera aus dem Hauptmenü
- 15. Android Kamera Absicht
- 16. Android - Kamera Vorschau
- 17. Kamera Metering - Android
- 18. android kamera orientierung SurfaceView
- 19. Android Fail Kamera Service
- 20. Broadcasting Android Kamera Video
- 21. Android-Kamera-Oberflächenansicht
- 22. Bildverarbeitung mit Android-Kamera
- 23. Android Kamera Vorschau Rotation
- 24. Zuschneiden der Android-Kamera
- 25. Android Kamera Orientierung
- 26. Mit Android-Kamera
- 27. Android: Kamera: max. Auflösung
- 28. Android Individuelle Kamera-Qualität
- 29. Kamera/Bildausrichtung in Android
- 30. Android Kamera setJpegQuality ignoriert
Ich bin mir nicht ganz sicher, ob die Belichtungseinstellung die gleichen Ergebnisse mit der ISO-Einstellung erzielen würde, könnte es möglich sein. Allerdings läuft der Wunsch 2.1 und die setExposureCompensation ist verfügbar für API-Ebene 8, die 2.2 ist Also muss es einen anderen Weg in 2.1, es zu tun. Danke für Ihre Antwort – ee3509