我正在创建一个自定义相机,在完成之前我还有 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;
}
}
我遇到的问题是预览中的图像和保存的图像有点偏离。保存的图像从图像顶部显示更多。所以,假设我拍了一张门的照片,我将预览的顶部与门的顶部对齐,拍摄照片,保存的图像,显示我认为是 30dp 更多的图像,在门上方显示预览未显示的内容。
我用来裁剪图像的代码如下:
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()));
我将完整图像保存到手机图库,调整图像大小,并将调整大小的图像存储到我的应用程序目录中。
那么,为什么我的预览没有显示相机看到的内容,并且正在保存?我怎样才能获得我的预览顶部,成为相机顶部所看到的?