Próbuję umieścić aparat na powierzchni. Widok w orientacji pionowej na telefonie z Androidem. Użyłem http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html, aby umieścić kamerę w SurfaceView. Jednak kamera obraca się o 90 stopni, więc próbowałem naprawić setDisplayOrientation (90), ale to powoduje zgniatanie obrazu (prawdopodobnie nie zmienia rozmiaru właściwie surfaceView). Jak mogę to zrobić, aby aparat nie został zgnieciony?Aparat się rozciąga w trybie portretowym.
Odpowiedz
Należy zmienić rozmiar obrazu zgodnie z ruchem obrotowym. Zobacz przykład here.
Jeśli korzystasz z demonstracji Androida API, musisz zmodyfikować funkcję OnLayout()
.
Zasadniczo wersja demonstracyjna interfejsu API systemu Android, ustawia rozmiar podglądu zgodnie ze współczynnikiem proporcji, tak aby obraz podglądu został zgnieciony i wyświetlany na środku ekranu z niewielkim rozmiarem w trybie portretu.
Nawet jeśli ustawimy orientację ekranu na tryb portretowy, szerokość i wysokość podglądu nie ulegną zmianie. Dlatego obraz podglądu został spłaszczony.
Funkcja ta służy do zmiany rozmiaru obrazu będzie przydatna
public Bitmap resize(Bitmap img,int Width,int Height){
int width = img.getWidth();
int height = img.getHeight();
int newWidth = (int) Width;
int newHeight = (int) Height;
// calculate the scale - in this case = 0.4f
float scaleWidth = ((float) newWidth)/width;
float scaleHeight = ((float) newHeight)/height;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// rotate the Bitmap
//matrix.postRotate(45);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
return resizedBitmap;
}
Jedyną rzeczą, która pracowała dla mnie jest
W kodzie mCamera.setDisplayOrientation(90);
Układ ma fill_parent
zarówno height
i width
.
I plik manifestu ma android:screenOrientation="portrait"
Jaka powinna być wysokość i szerokość w tym przykładzie? Chcę, żeby podgląd był mniej więcej w połowie ekranu, ale nie chcę kodować wartości, aby mógł działać na różnych rozmiarach ekranu. – user1154920
Jest to metoda wywołania zwrotnego SurfaceHolder, więc parametry wysokości i szerokości metody zostaną ustawione przez sprzęt komputerowy. Jeśli chcesz, aby podgląd był połowę ekranu, po prostu ustaw je w instrukcjach "if", takich jak: parameters.setPreviewSize (width/2, height/2); –