增加HDR连拍功能

mem
liuguijing 6 months ago
parent 973d09a93f
commit 61e43d48e0

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

@ -11,7 +11,9 @@ import android.hardware.camera2.DngCreator;
import android.media.Image; import android.media.Image;
import android.media.ImageReader; import android.media.ImageReader;
import android.os.Environment; import android.os.Environment;
import android.widget.Toast;
import com.xypower.mppreview.bean.Contants;
import com.xypower.mppreview.bean.PngPhotoBean; import com.xypower.mppreview.bean.PngPhotoBean;
import java.io.File; import java.io.File;
@ -32,9 +34,9 @@ public class ImageSaver implements Runnable {
private final Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader; private final Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader;
private final long mExpostime; 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; mImage = image;
mFile = file; mFile = file;
mCaptureResult = result; mCaptureResult = result;
@ -42,6 +44,7 @@ public class ImageSaver implements Runnable {
mContext = context; mContext = context;
mReader = reader; mReader = reader;
mExpostime = mexpostime; mExpostime = mexpostime;
mlist = list;
} }
@Override @Override
@ -87,6 +90,7 @@ public class ImageSaver implements Runnable {
} }
mReader.close(); mReader.close();
if (success) { if (success) {
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
String directoryPath = directory.getPath(); String directoryPath = directory.getPath();
File file = new File(directory, "create_" + mExpostime + "_" + generateTimestamp() + ".png"); File file = new File(directory, "create_" + mExpostime + "_" + generateTimestamp() + ".png");
@ -99,10 +103,10 @@ public class ImageSaver implements Runnable {
PngPhotoBean bean = new PngPhotoBean(); PngPhotoBean bean = new PngPhotoBean();
bean.setEtime(mExpostime); bean.setEtime(mExpostime);
bean.setPath(path); bean.setPath(path);
list.add(bean); mlist.add(bean);
if (list.size() == 2) { if (mlist.size() == 2) {
PngPhotoBean bean1 = list.get(0); PngPhotoBean bean1 = mlist.get(0);
PngPhotoBean bean2 = list.get(1); PngPhotoBean bean2 = mlist.get(1);
makeHdr(bean1.getEtime(), bean1.getPath(), bean2.getEtime(), bean2.getPath(), directoryPath + "/" + "hdr_" + generateTimestamp() + ".png"); 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.Image;
import android.media.ImageReader; import android.media.ImageReader;
import com.xypower.mppreview.bean.PngPhotoBean;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ImageSaverBuilder { public class ImageSaverBuilder {
public Image mImage; public Image mImage;
@ -14,10 +18,11 @@ public class ImageSaverBuilder {
public CaptureResult mCaptureResult; public CaptureResult mCaptureResult;
public CameraCharacteristics mCharacteristics; public CameraCharacteristics mCharacteristics;
public Context mContext; public Context mContext;
public long mexpostime; public long mexpostime;
public Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader; public Camera2RawFragment.RefCountedAutoCloseable<ImageReader> mReader;
private ArrayList<PngPhotoBean> mlist;
/** /**
* Construct a new ImageSaverBuilder using the given {@link Context}. * Construct a new ImageSaverBuilder using the given {@link Context}.
* *
@ -59,6 +64,12 @@ public class ImageSaverBuilder {
return this; 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) { public synchronized ImageSaverBuilder setCharacteristics(final CameraCharacteristics characteristics) {
if (characteristics == null) throw new NullPointerException(); if (characteristics == null) throw new NullPointerException();
mCharacteristics = characteristics; mCharacteristics = characteristics;
@ -69,7 +80,7 @@ public class ImageSaverBuilder {
if (!isComplete()) { if (!isComplete()) {
return null; 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() { public synchronized String getSaveLocation() {

Loading…
Cancel
Save