package io.evercam.androidapp.tasks; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import io.evercam.androidapp.video.SnapshotManager; public class CaptureSnapshotRunnable implements Runnable { private final String TAG = "evercamplay_CaptureSnapshotTask"; private Activity activity; private String path; private Bitmap bitmap; public CaptureSnapshotRunnable(Activity activity, String path, Bitmap bitmap) { this.activity = activity; this.path = path; this.bitmap = bitmap; } public static Bitmap drawableToBitmap(Drawable drawable) { if(drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } int width = drawable.getIntrinsicWidth(); width = width > 0 ? width : 1; int height = drawable.getIntrinsicHeight(); height = height > 0 ? height : 1; Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(canvas); return bitmap; } public String capture(Bitmap snapshotBitmap) { if(snapshotBitmap != null) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); snapshotBitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes); File f = new File(path); try { f.createNewFile(); FileOutputStream fo = new FileOutputStream(f); fo.write(bytes.toByteArray()); fo.close(); return f.getPath(); } catch(IOException e) { e.printStackTrace(); } } return ""; } @Override public void run() { if(bitmap != null) { String savedPath = capture(bitmap); if(!savedPath.isEmpty()) { SnapshotManager.updateGallery(savedPath, activity); } } } }