2012-03-06 4 views
6

Я пытаюсь поместить камеру в поверхностьView в портретной ориентации на Android-телефоне. Я использовал http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html, чтобы поместить камеру в surfaceView. Однако камера поворачивается на 90 градусов, поэтому я попытался сделать setDisplayOrientation (90), чтобы исправить ее, но это сквозит изображение (это, вероятно, неправильно изменяет поверхностьView?). Как я могу сделать это, чтобы камера не хлюпала?Камера растягивается в портретном режиме

ответ

6

Необходимо изменить размер изображения в соответствии с оборотом. См. Пример here.

+0

Что высота и ширина должна быть в этом примере? Я хочу, чтобы предварительный просмотр был примерно на половину экрана, но мне не нужны значения жесткого кода, поэтому он может работать на разных размерах экрана. – user1154920

+0

Это метод обратного вызова SurfaceHolder, поэтому параметры высоты и ширины метода будут задаваться с помощью аппаратное обеспечение. Если вы хотите, чтобы ваш предварительный просмотр был половиной экрана, просто установите их в выражениях «if», таких как: parameters.setPreviewSize (width/2, height/2); –

2

Если вы использовали демонстрационные версии Android API, вам необходимо изменить функцию OnLayout().

В основном демо-версия Android API устанавливает размер предварительного просмотра в соответствии с соотношением сторон, так что изображение предварительного просмотра сжимается и отображается в центре экрана с небольшими размерами в портретном режиме.

Даже если мы установили ориентацию экрана в портретном режиме, ширина и высота предварительного просмотра не будут изменены. Вот почему изображение предварительного просмотра было зажато.

-2

использовать эту функцию для изменения размера изображения, это будет полезно для вас

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

Единственное, что работал для меня

В коде mCamera.setDisplayOrientation(90);

Схема имеет fill_parent для обоих height и width.

И файл манифеста имеет android:screenOrientation="portrait"

Смежные вопросы