Moja aplikacja otwiera aparat za pomocą uchwytu powierzchni. Aparat otwiera się z domyślnym rozmiarem podglądu. W przypadku niektórych urządzeń domyślny rozmiar podglądu pozwala uzyskać więcej obrazu, niż jest to faktycznie widoczne na ekranie. W celu uniknięcia tego, zacząłem samodzielnie ustawiać rozmiar podglądu. Kryterium polega na wybraniu rozmiaru podglądu z dostępnej listy rozmiarów, która jest najbliższa szerokości ekranu.Podgląd aparatu z Androidem Rozmiar wydania
To działa dobrze przez większość czasu. Ale często natknę się na kilka urządzeń, które nie podoba mi się wybrany przeze mnie rozmiar podglądu.
1) Nexus 4 nie przechwycił obrazu dla jednego z wybranych rozmiarów podglądu. 2) Samsung S 4 daje pasmo linii (szum) wzdłuż przechwyconych obrazów.
Tak więc chciałem zrozumieć, czy robię coś wbrew standardowi. Oto moje pytania: -
1) Używam uchwytu do powierzchni, aby otworzyć kamerę. Czy jest jakiś inny sposób, w jaki mogę korzystać ze sprzętu kamery w mojej aplikacji.
2) Wybieram rozmiar podglądu z listy dostępnych rozmiarów. Czy są jakieś konkretne, których powinienem szukać przed wyborem dowolnego rozmiaru? Logika wyboru rozmiaru jest wymieniona poniżej: -
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;
}
Wszelkie wskazówki na ten temat naprawdę pomogą.
Dzięki! Gagan