我正在创建一个自定义相机,在完成之前我还有2个错误需要修复。我在这里寻求其中一个的帮助。
我正在尝试创建一个正方形预览(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()));
我将完整图片保存到手机图库,调整图片大小,并将调整后的内容存储到我的应用目录。
那么,为什么我的预览没有显示相机看到的内容并且正在保存?如何才能获得预览的顶部,成为相机顶部的样子?