カスタム カメラを作成していますが、完成前にさらに 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()));
画像全体を電話ギャラリーに保存し、画像のサイズを変更して、サイズ変更した画像をアプリ ディレクトリに保存します。
では、プレビューに、カメラが見て保存しているものが表示されないのはなぜですか? カメラの上部が見ているものになるように、プレビューの上部を取得するにはどうすればよいですか?