Categories
SugiBlog ホームページ制作・システム開発

スクリーンショットの保存

Androidでは、画面のキャプチャはできないようですが、ImageViewのキャプチャならキャッシュを利用してできるようです。
ローカルにPNG形式で保存するサンプルです。

private boolean ScreenShot(ImageView imgView, String filename) {
    try {
        FileOutputStream out = openFileOutput(filename, MODE_PRIVATE);

        imgView.setDrawingCacheEnabled(false); //タイミングを確実にするために一旦falseに
        imgView.setDrawingCacheEnabled(true);

        Bitmap bmp = Bitmap.createBitmap(imgView.getDrawingCache());
        bmp.compress(CompressFormat.PNG, 100, out);

        out.close();

        return true;

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}

SDカードに保存する場合

private String PATH = Environment.getExternalStorageDirectory().toString();
private Uri IMAGE_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

private boolean ScreenShot(ImageView imgView, String filename) {
    try {
        File file = new File(PATH, filename);
        FileOutputStream out = new FileOutputStream(file);

        imgView.setDrawingCacheEnabled(false);
        imgView.setDrawingCacheEnabled(true);

        Bitmap bmp = Bitmap.createBitmap(imgView.getDrawingCache());
        bmp.compress(CompressFormat.JPEG, 100, out);
        out.close();

        ContentResolver cr = getContentResolver();

        long dateTaken = System.currentTimeMillis();

        ContentValues values = new ContentValues(5);

        values.put(Images.Media.TITLE, "name");
        values.put(Images.Media.DISPLAY_NAME, filename);
        values.put(Images.Media.DATE_TAKEN, dateTaken);
        values.put(Images.Media.MIME_TYPE, "image/jpeg");
        values.put(Images.Media.DATA, PATH + "/" + filename);

        cr.insert(IMAGE_URI, values);

        return true;

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}
7,339 views

“スクリーンショットの保存” への2件のフィードバック

  1. delicatessen より:

    プログラムど素人です、すいません
    ScreenShot(ImageView imgView, String filename)
    この部分のimgViewにはなにを入れればいいのでしょうか?専門用語などもあまり分からないため、分かりやすく教えて頂けるとありがたいです(^^;

    • K.Sugimoto より:

      コメントありがとうございます(^^)

      ImageViewについては理解されているという前提でお答えさせていただきます。
      ※もしもImageViewについて知りたい、ということであればまたコメントください。

      このScreenShotというメソッド(関数)は、文字通りスクリーンショットを保存するもので、
      ImageViewに表示されているものを保存するという処理が目的となります。

      例えば、表示した画像にフィルター加工をする、それを保存するといった利用の仕方になります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*