21

私はアプリ内カメラを実装しており、写真を撮るたびに画像は320x240になりますが、携帯電話のカメラははるかに高い解像度に対応しています(GalaxyNexus)。解像度を設定するためのパラメータが見つかりませんでした。撮影している画像の解像度を上げるにはどうすればよいですか?関連するコードは次のとおりです。

@Override
public void surfaceCreated( SurfaceHolder holder ) {

    setSurfaceHolder( holder );
}

@Override
public void surfaceDestroyed( SurfaceHolder holder ) {

    setSurfaceHolder( null );
}

private void attachCameraToSurface( Camera camera, SurfaceHolder holder ) {

    try {
        camera.setPreviewDisplay( holder );
        setInPreview( true );
    }
    catch (IOException e) {
        Log.e( "CameraFragment", "Exception in attachCameraToSurface()", e );
    }
}

@Override
public void surfaceChanged( SurfaceHolder holder, int format, int width, int height ) {

    Camera camera = getCamera();
    if ( camera == null ) {
        return;
    }

    Camera.Size size = getCameraPreviewSize( camera );
    Camera.Parameters params = camera.getParameters();
    params.setPreviewSize( size.width, size.height );
    camera.setParameters( params );

    attachCameraToSurface( camera, holder );

    startPreview();
}

private Camera.Size getCameraPreviewSize( Camera camera ) {

    Camera.Parameters params = camera.getParameters();
    List<Camera.Size> supportedSizes = params.getSupportedPreviewSizes();

    Rect frame = getSurfaceHolder().getSurfaceFrame();
    int width = frame.width();
    int height = frame.height();

    for (Camera.Size size : supportedSizes) {
        if ( size.width >= width || size.height >= height ) {
            return size;
        }
    }

    return supportedSizes.get( 0 );
}

@Override
public void onClick( View v ) {

    switch (v.getId()) {
        case R.id.camera_action_ImageView:
            getCamera().takePicture( getShutterCallback(), null, new JpegPictureCallback() );
        break;
    }
}

private class JpegPictureCallback implements PictureCallback {

    @Override
    public void onPictureTaken( byte[] data, Camera camera ) {

        Bitmap bitmap = null;
        try {
            bitmap = BitmapFactory.decodeByteArray( data, 0, data.length );
        }
        catch (OutOfMemoryError e) {
            Log.e( "CameraFragment", "Out of memory decoding image from camera.", e );
            return;
        }
        data = null;

        if ( bitmap != null ) {
            new SavePictureWorker( getActivity() ).execute( bitmap );
        }

        startPreview();
    }
}
4

5 に答える 5

38

を使用しparams.setPictureSize()ます。詳細については、 Camera.Parametersを参照してください。

params.getSupportedPictureSizes()サポートされている画像サイズの配列を取得するには、必ず最初に呼び出してください。次に、リストからサイズを選択し、setPictureSize()メソッドを使用して目的のサイズを設定します。

Camera.Parameters params = camera.getParameters();
List<Camera.Size> supportedSizes = params.getSupportedPictureSizes();
.
.
Camera.Size sizePicture = (one of the sizes from supportedSizes list);
.
params.setPictureSize(sizePicture.width, sizePicture.height);
于 2012-05-15T17:23:34.207 に答える
10
Camera.Parameters param;
param = camera.getParameters();

Camera.Size bestSize = null;
List<Camera.Size> sizeList = camera.getParameters().getSupportedPreviewSizes();
bestSize = sizeList.get(0);
for(int i = 1; i < sizeList.size(); i++){
    if((sizeList.get(i).width * sizeList.get(i).height) > (bestSize.width * bestSize.height)){
        bestSize = sizeList.get(i);
    }
}

List<Integer> supportedPreviewFormats = param.getSupportedPreviewFormats();
Iterator<Integer> supportedPreviewFormatsIterator = supportedPreviewFormats.iterator();
while(supportedPreviewFormatsIterator.hasNext()){
    Integer previewFormat =supportedPreviewFormatsIterator.next();
    if (previewFormat == ImageFormat.YV12) {
        param.setPreviewFormat(previewFormat);
    }
}

param.setPreviewSize(bestSize.width, bestSize.height);

param.setPictureSize(bestSize.width, bestSize.height);

camera.setParameters(param);
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
于 2014-11-01T05:06:26.250 に答える
3

最初にcamera.getSupportedPictureSizes()を呼び出して、サポートされている画像サイズの配列を取得してください。

実はparams.getSupportedPictureSizes();

于 2013-08-22T08:11:25.790 に答える
2

私は、あなたが使うことができると思いますsetPictureSize (int width, int height)。画像のサイズをピクセル単位で設定するために使用されます。

于 2012-05-15T17:27:02.080 に答える
1
Camera.Parameters parameters = camera.getParameters();
            List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
            int w = 0, h = 0;
            for (Camera.Size size : sizes) {
                if (size.width > w || size.height > h) {
                    w = size.width;
                    h = size.height;
                }

            }
            parameters.setPictureSize(w, h);
于 2017-05-03T10:01:19.280 に答える