删除生成的文件,保留hdr文件,增加拍摄成功的回调

mem
liuguijing 6 months ago
parent 0fdfb20fb4
commit 2c3d04758a

@ -143,7 +143,6 @@ public class Camera2RawFragment extends Fragment {
private double pic1 = 0;
private ArrayList<PngPhotoBean> mlist = new ArrayList<>();
/**
* {@link TextureView.SurfaceTextureListener} handles several lifecycle events of a
* {@link TextureView}.
@ -1045,7 +1044,6 @@ public class Camera2RawFragment extends Fragment {
}
public void takePicture() {
mlist = new ArrayList<>();
synchronized (mCameraStateLock) {
mPendingUserCaptures++;
if (mState != STATE_PREVIEW) {
@ -1095,6 +1093,7 @@ public class Camera2RawFragment extends Fragment {
double step = rational.doubleValue();
// mCharacteristics.get(CameraMetadata.CONTROL_AE_COMPENSATION_STEP)
ArrayList<PngPhotoBean> mlist = new ArrayList<>();
List<CaptureRequest> requests = new ArrayList<>();
double v = 0;
for (int idx = 0; idx < 2; idx++) {
@ -1116,9 +1115,6 @@ public class Camera2RawFragment extends Fragment {
}
if (idx == 1) {
// captureBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, new Integer(4));
// 设置曝光时间例如设置为1000微秒
// long exposureTime = 1000 000000L; // 1000微秒
captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
if (exposureTime > 0) {
if (pic1 <= 0) {
@ -1138,6 +1134,12 @@ public class Camera2RawFragment extends Fragment {
// ImageSaverBuilder jpegBuilder = new ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);
ImageSaverBuilder rawBuilder = new ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);//保存拍照参数
rawBuilder.setCallback(new CompleteCallback() {
@Override
public void onResult() {
showToast("HDR拍摄成功");
}
});
rawBuilder.setList(mlist);
// mJpegResultQueue.put((int) request.getTag(), jpegBuilder);
mRawResultQueue.put((int) request.getTag(), rawBuilder);
@ -1378,7 +1380,7 @@ public class Camera2RawFragment extends Fragment {
*
* @param text The message to show.
*/
private void showToast(String text) {
public void showToast(String text) {
// We show a Toast by sending request message to mMessageHandler. This makes sure that the
// Toast is shown on the UI thread.
Message message = Message.obtain();

@ -0,0 +1,5 @@
package com.xypower.mppreview;
public interface CompleteCallback {
void onResult();
}

@ -8,16 +8,9 @@ import java.util.Locale;
public class HdrUtil {
// static {
// loadLibrary("mppreview");
// }
public static String generateTimestamp() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSS", Locale.US);
return sdf.format(new Date());
}
// public static native boolean makeHdr(long exposureTime1, String path1, long exposureTime2, String path2, String outputPath);
//
// public static native boolean makeHdr2(long exposureTime1, String path1, long exposureTime2, String path2, long exposureTime3, String path3, String outputPath);
}

@ -31,13 +31,14 @@ public class ImageSaver implements Runnable {
private final File mFile;
private final CaptureResult mCaptureResult;
private final CameraCharacteristics mCharacteristics;
private CompleteCallback mCallback;
private final Context mContext;
private final Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader;
private ArrayList<PngPhotoBean> mlist = new ArrayList<>();//用来存储已拍照的照片名称
public ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context, Camera2RawFragment.RefCountedAutoCloseable<ImageReader> reader, ArrayList<PngPhotoBean> list) {
public ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context, Camera2RawFragment.RefCountedAutoCloseable<ImageReader> reader, ArrayList<PngPhotoBean> list,CompleteCallback callback) {
mImage = image;
mFile = file;
mCaptureResult = result;
@ -45,6 +46,7 @@ public class ImageSaver implements Runnable {
mContext = context;
mReader = reader;
mlist = list;
mCallback = callback;
}
@Override
@ -95,7 +97,6 @@ public class ImageSaver implements Runnable {
String directoryPath = directory.getPath();
File file = new File(directory, "create_" + t + "_" + generateTimestamp() + ".png");
String path = file.getPath();
Log.e("测试测试", "开始转化:" + System.currentTimeMillis());
try {
RawToJpgConverter.convertRawToJpg(mFile.getPath(), path);
} catch (IOException e) {
@ -105,16 +106,28 @@ public class ImageSaver implements Runnable {
bean.setEtime(t);
bean.setPath(path);
mlist.add(bean);
Log.e("测试测试", "转化结束:" + System.currentTimeMillis());
if (mFile.exists()) {
mFile.delete();
}
if (mlist.size() == 2) {
Log.e("测试测试", "开始合成:" + System.currentTimeMillis());
PngPhotoBean bean1 = mlist.get(0);
PngPhotoBean bean2 = mlist.get(1);
String path1 = bean1.getPath();
String path2 = bean2.getPath();
String outputPath = directoryPath + "/" + "hdr_" + generateTimestamp() + ".png";
boolean b = makeHdr(bean1.getEtime(), path1, bean2.getEtime(), path2, outputPath);
Log.e("测试测试", "合成结束:" + System.currentTimeMillis());
if (b) {
mCallback.onResult();
// Toast.makeText(mContext.getApplicationContext(), "图片HDR成功", Toast.LENGTH_SHORT).show();
File file1 = new File(path1);
File file2 = new File(path2);
if (file1.exists()) {
file1.delete();
}
if (file2.exists()) {
file2.delete();
}
}
}
}
}

@ -21,6 +21,7 @@ public class ImageSaverBuilder {
public Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader;
private ArrayList<PngPhotoBean> mlist;
private CompleteCallback mCallback;
/**
* Construct a new ImageSaverBuilder using the given {@link Context}.
@ -69,11 +70,15 @@ public class ImageSaverBuilder {
return this;
}
public synchronized ImageSaverBuilder setCallback(CompleteCallback callback) {
mCallback = callback;
return this;
}
public synchronized ImageSaver buildIfComplete() {
if (!isComplete()) {
return null;
}
return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader, mlist);
return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader, mlist,mCallback);
}
public synchronized String getSaveLocation() {

Loading…
Cancel
Save