2012-03-06 19 views
6

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

6

Należy zmienić rozmiar obrazu zgodnie z ruchem obrotowym. Zobacz przykład here.

+0

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

+0

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); –

2

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.

-2

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; 

} 
0

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"

Powiązane problemy