package com.eighteengray.procamera.business; import android.media.Image; import android.media.ImageReader; import android.util.Log; import com.eighteengray.procameralibrary.dataevent.ImageAvailableEvent; import org.greenrobot.eventbus.EventBus; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; public class ImageSaver implements Runnable { private ImageReader mImageReader; private File file; public ImageSaver(ImageReader mImageReader, File f) { this.mImageReader = mImageReader; this.file = f; } @Override public void run() { Image image = mImageReader.acquireNextImage(); try { ByteBuffer buffer = image.getPlanes()[0].getBuffer(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); try { save(bytes, file); } catch (IOException e) { e.printStackTrace(); } image.close(); ImageAvailableEvent.ImagePathAvailable imagePathAvailable = new ImageAvailableEvent.ImagePathAvailable(); imagePathAvailable.setImagePath(file.getAbsolutePath()); EventBus.getDefault().post(imagePathAvailable); } catch (Exception e) { e.getStackTrace(); } } /** * 保存 * @param bytes * @param file * @throws IOException */ private void save(byte[] bytes, File file) throws IOException { Log.i("JpegSaver", "save"); OutputStream os = null; try { os = new FileOutputStream(file); os.write(bytes); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (os != null) { os.close(); } } } }