1

こんにちは、カメラ アプリケーションに問題があります。ディスプレイが引き伸ばされています。しかし、写真は順調に出ています。ディスプレイのみが引き伸ばされます。ここに必要なコードがあります。表面が変更されたコールバック

public void surfaceChanged(SurfaceHolder holder, int format,
                               int width, int height) {
      initPreview(width, height);
      startPreview();
    }

これが初期プレビュー機能です。

private void initPreview(int width, int height) {
    if (camera != null && previewHolder.getSurface() != null) {
        try {
            camera.setPreviewDisplay(previewHolder);
        }
        catch (Throwable t) {
            Log.e("PreviewDemo-surfaceCallback",
                "Exception in setPreviewDisplay()", t);
            Toast.makeText(PictureDemo.this, t.getMessage(),
                Toast.LENGTH_LONG).show();
        }

        if (!cameraConfigured) {
            Camera.Parameters parameters=camera.getParameters();
            Camera.Size size=getOptimalPreviewSize(width, height);
            Camera.Size pictureSize=getSmallestPictureSize(parameters);

            if (size != null && pictureSize != null) {
                parameters.setPreviewSize(size.width, size.height);
                parameters.setPictureSize(pictureSize.width,
                    pictureSize.height);
                parameters.setPictureFormat(ImageFormat.JPEG);
                camera.setParameters(parameters);
                cameraConfigured=true;
            }
        }
    }
}

他の 2 つの関数を以下に示します。

private Camera.Size getOptimalPreviewSize(int width, int height) {
    Camera.Size result=null;
    Camera.Parameters p = camera.getParameters();
    for (Camera.Size size : p.getSupportedPreviewSizes()) {
        if (size.width<=width && size.height<=height) {
            if (result==null) {
                result=size;
            } else {
                int resultArea=result.width*result.height;
                int newArea=size.width*size.height;
                if (newArea>resultArea) {
                    result=size;
                }
            }
        }
    }
    return result;
}

private Camera.Size getSmallestPictureSize(Camera.Parameters parameters) {
    Camera.Size result=null;
    for (Camera.Size size : parameters.getSupportedPictureSizes()) {
        if (result == null) {
            result=size;
        }
        else {
            int resultArea=result.width * result.height;
            int newArea=size.width * size.height;
            if (newArea < resultArea) {
                result=size;
            }
        }
    }
    return(result);
}

では、何が問題だと思いますか。ディスプレイが引き伸ばされるのはなぜですか?

4

0 に答える 0