1

カスタム カメラを作成していますが、完成前にさらに 2 つのバグを修正する必要があります。そのうちの 1 つについて助けを求めています。

正方形のプレビュー (SurfaceView) を作成し、その正方形をファイルに保存しようとしています。これを達成できた唯一の方法は、次のカスタム ビューを使用することです。

public class SquareSurfaceView extends SurfaceView {

    private int width;
    private int height;

    public SquareSurfaceView(Context context) {
        super(context);
    }

    public SquareSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareSurfaceView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        width = MeasureSpec.getSize(widthMeasureSpec);
        setMeasuredDimension(width, width);
    }

    public int getViewWidth() {
        return width;
    }

    public int getViewHeight() {
        return height;
    }
}

私が抱えている問題は、プレビューの画像と保存された画像が少しずれていることです。保存された画像は、画像の上部からより多くを示しています.. では、ドアの写真を撮り、プレビューの上部をドアの上部に合わせて、写真を撮り、保存される画像を撮影するとします。プレビューでは表示されなかったドアの上にあるものを示す、約 30 dp の MORE 画像に相当するものを示しています。

画像をトリミングするために使用したコードは次のとおりです。

SimpleDateFormat sdf = new SimpleDateFormat(
        "yyyyMMdd_HHmmss", Locale.US);
mLastPhotoFilename = "IMG_" + sdf.format(new Date())
        + ".jpg";

// cropped file
File photoFile = new File(photoStoragePath,
        mLastPhotoFilename);

// gallery file
File galleryFile = new File(galleryStoragePath,
        mLastPhotoFilename);

// write the cropped file
mLastPhoto
        .compress(
                CompressFormat.JPEG,
                95,
                new FileOutputStream(galleryFile
                        .getAbsolutePath()));

// resize the bitmap
Bitmap scaledPhoto = Bitmap.createBitmap(mLastPhoto, 0, 0,
        mLastPhoto.getWidth(), mLastPhoto.getWidth());

// write the cropped file
scaledPhoto.compress(CompressFormat.JPEG, 95,
        new FileOutputStream(photoFile.getAbsolutePath()));

画像全体を電話ギャラリーに保存し、画像のサイズを変更して、サイズ変更した画像をアプリ ディレクトリに保存します。

では、プレビューに、カメラが見て保存しているものが表示されないのはなぜですか? カメラの上部が見ているものになるように、プレビューの上部を取得するにはどうすればよいですか?

4

0 に答える 0