增加HDR连拍功能

mem
liuguijing 6 months ago
parent 973d09a93f
commit 61e43d48e0

@ -59,6 +59,7 @@ import android.widget.Button;
import android.widget.Toast;
import com.xypower.mppreview.bean.Contants;
import com.xypower.mppreview.bean.PngPhotoBean;
import com.xypower.mppreview.widget.ErrorDialog;
import java.io.File;
@ -143,6 +144,7 @@ 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}.
@ -459,7 +461,7 @@ public class Camera2RawFragment extends Fragment {
StringBuilder sb = new StringBuilder();
synchronized (mCameraStateLock) {
jpegBuilder = mJpegResultQueue.get(requestId);
// jpegBuilder = mJpegResultQueue.get(requestId);
rawBuilder = mRawResultQueue.get(requestId);
// if (jpegBuilder != null) {
@ -474,7 +476,7 @@ public class Camera2RawFragment extends Fragment {
sb.append(rawBuilder.getSaveLocation());
}
handleCompletionLocked(requestId, jpegBuilder, mJpegResultQueue);
// handleCompletionLocked(requestId, jpegBuilder, mJpegResultQueue);
handleCompletionLocked(requestId, rawBuilder, mRawResultQueue);
finishedCaptureLocked();
@ -1044,6 +1046,7 @@ public class Camera2RawFragment extends Fragment {
}
public void takePicture() {
mlist = new ArrayList<>();
synchronized (mCameraStateLock) {
mPendingUserCaptures++;
if (mState != STATE_PREVIEW) {
@ -1136,10 +1139,12 @@ public class Camera2RawFragment extends Fragment {
}
}
}
CaptureRequest request = captureBuilder.build();
// ImageSaverBuilder jpegBuilder = new ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);
ImageSaverBuilder rawBuilder = new ImageSaverBuilder(activity).setCharacteristics(mCharacteristics);//保存拍照参数
rawBuilder.setExposetime((long) v);//保存曝光时间
rawBuilder.setList(mlist);
// mJpegResultQueue.put((int) request.getTag(), jpegBuilder);
mRawResultQueue.put((int) request.getTag(), rawBuilder);
requests.add(request);

@ -11,7 +11,9 @@ import android.hardware.camera2.DngCreator;
import android.media.Image;
import android.media.ImageReader;
import android.os.Environment;
import android.widget.Toast;
import com.xypower.mppreview.bean.Contants;
import com.xypower.mppreview.bean.PngPhotoBean;
import java.io.File;
@ -32,9 +34,9 @@ public class ImageSaver implements Runnable {
private final Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader;
private final long mExpostime;
private static ArrayList<PngPhotoBean> list = new ArrayList<>();//用来存储已拍照的照片名称
private ArrayList<PngPhotoBean> mlist = new ArrayList<>();//用来存储已拍照的照片名称
public ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context, Camera2RawFragment.RefCountedAutoCloseable<ImageReader> reader, long mexpostime) {
public ImageSaver(Image image, File file, CaptureResult result, CameraCharacteristics characteristics, Context context, Camera2RawFragment.RefCountedAutoCloseable<ImageReader> reader, long mexpostime, ArrayList<PngPhotoBean> list) {
mImage = image;
mFile = file;
mCaptureResult = result;
@ -42,6 +44,7 @@ public class ImageSaver implements Runnable {
mContext = context;
mReader = reader;
mExpostime = mexpostime;
mlist = list;
}
@Override
@ -87,6 +90,7 @@ public class ImageSaver implements Runnable {
}
mReader.close();
if (success) {
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
String directoryPath = directory.getPath();
File file = new File(directory, "create_" + mExpostime + "_" + generateTimestamp() + ".png");
@ -99,10 +103,10 @@ public class ImageSaver implements Runnable {
PngPhotoBean bean = new PngPhotoBean();
bean.setEtime(mExpostime);
bean.setPath(path);
list.add(bean);
if (list.size() == 2) {
PngPhotoBean bean1 = list.get(0);
PngPhotoBean bean2 = list.get(1);
mlist.add(bean);
if (mlist.size() == 2) {
PngPhotoBean bean1 = mlist.get(0);
PngPhotoBean bean2 = mlist.get(1);
makeHdr(bean1.getEtime(), bean1.getPath(), bean2.getEtime(), bean2.getPath(), directoryPath + "/" + "hdr_" + generateTimestamp() + ".png");
}
}

@ -6,7 +6,11 @@ import android.hardware.camera2.CaptureResult;
import android.media.Image;
import android.media.ImageReader;
import com.xypower.mppreview.bean.PngPhotoBean;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ImageSaverBuilder {
public Image mImage;
@ -14,10 +18,11 @@ public class ImageSaverBuilder {
public CaptureResult mCaptureResult;
public CameraCharacteristics mCharacteristics;
public Context mContext;
public long mexpostime;
public Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader;
private ArrayList<PngPhotoBean> mlist;
/**
* Construct a new ImageSaverBuilder using the given {@link Context}.
*
@ -59,6 +64,12 @@ public class ImageSaverBuilder {
return this;
}
public synchronized ImageSaverBuilder setList(ArrayList<PngPhotoBean> list) {
if (list == null) throw new NullPointerException();
mlist = list;
return this;
}
public synchronized ImageSaverBuilder setCharacteristics(final CameraCharacteristics characteristics) {
if (characteristics == null) throw new NullPointerException();
mCharacteristics = characteristics;
@ -69,7 +80,7 @@ public class ImageSaverBuilder {
if (!isComplete()) {
return null;
}
return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader, mexpostime);
return new ImageSaver(mImage, mFile, mCaptureResult, mCharacteristics, mContext, mReader, mexpostime, mlist);
}
public synchronized String getSaveLocation() {

Loading…
Cancel
Save