Увеличить камеру в SurfaceView-Preview - PullRequest
4 голосов
/ 14 февраля 2012

Я знаю функции камеры getMaxZoom(), isZoomSupported() или get/setZoom().Я могу использовать эти функции, но в Surface-Camera-Preview ничего не происходит.Я хочу, чтобы мой предварительный просмотр все время начинался с увеличения. Я использую Android 2.3.3.Я что-то забыл?!

Код:

Camera.Parameters parameters = camera.getParameters();
if(parameters.isZoomSupported())
          {
              int maxZoom= parameters.getMaxZoom();
              parameters.setZoom(maxZoom);
              camera.setParameters(parameters);
          }

Надеюсь, у кого-нибудь есть идея ...

Спасибо!

Ответы [ 3 ]

6 голосов
/ 03 мая 2012
import android.content.Context;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class CustomCameraView extends SurfaceView
{
    Camera camera;
    SurfaceHolder previewHolder;

    public void zoom()
    {
        Parameters params=camera.getParameters();
        params.setZoom(params.getMaxZoom());
        camera.setParameters(params);   
    }

    public void unzoom()
    {
        Parameters params=camera.getParameters();
        params.setZoom(0);
        camera.setParameters(params);
    }

    public CustomCameraView(Context context) 
    {
        super(context);
        previewHolder=this.getHolder();
        previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        SurfaceHolder.Callback surfaceHolderListener=new SurfaceHolder.Callback()
        {
            public void surfaceCreated(SurfaceHolder holder) 
            {
                camera=Camera.open();
                try{
                    camera.setPreviewDisplay(previewHolder);
                }
                catch (Exception e) {
                }
            }

            public void surfaceChanged(SurfaceHolder holder, int format,
                    int width, int height) {
                Parameters params=camera.getParameters();
                params.setPreviewSize(width, height);
                params.setPictureFormat(PixelFormat.JPEG);

                //if you want the preview to be zoomed from start :
                params.setZoom(params.getMaxZoom());

                camera.setParameters(params);
                camera.startPreview();
            }

            public void surfaceDestroyed(SurfaceHolder holder) {
                camera.stopPreview();
                camera.release();
            }
        };
        previewHolder.addCallback(surfaceHolderListener);
    }

}
4 голосов
/ 08 октября 2013
if (params.isZoomSupported()) {
    final int maxZoomLevel = params.getMaxZoom();
    Log.i("max ZOOM ", "is " + maxZoomLevel);
    zoomControls.setIsZoomInEnabled(true);
    zoomControls.setIsZoomOutEnabled(true);

    zoomControls.setOnZoomInClickListener(new OnClickListener(){
        public void onClick(View v){
            if(currentZoomLevel < maxZoomLevel){
                currentZoomLevel++;
                //mCamera.startSmoothZoom(currentZoomLevel);
                params.setZoom(currentZoomLevel);
                mCamera.setParameters(params);
            }
        }
    });

    zoomControls.setOnZoomOutClickListener(new OnClickListener(){
        public void onClick(View v){
            if(currentZoomLevel > 0){
                currentZoomLevel--;
                params.setZoom(currentZoomLevel);
                mCamera.setParameters(params);
            }
        }
    });    
}
else
    zoomControls.setVisibility(View.GONE);
2 голосов
/ 17 февраля 2012

Какой телефон вы используете? Я разрабатываю приложение, которое использует камеру и все устройства, на которых я тестировал, ведут себя по-разному. Я могу опубликовать тестовое приложение, если хотите. http://www.mediafire.com/?laxtolevt57vax2

Вот ссылка на тестовое приложение, с которым я работал. Я сделал много изменений, чтобы работать на нескольких телефонах. Это все еще далеко от совершенства, но зум работает. Я проверил на Samsung Galaxy s2, Droid X, Droid Bionic, Дроид 2, Союзник LG. Это не работает на HTC Sensation. getMaxZoom() возвращает ноль. Он также не работает на HTC Incredible 2. Функция AutoFocusCallback никогда не запускается, приложение зависает и блокирует камеру.

...