カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

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

この記事は最終更新日から1年以上経過しています。

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;
    }
}
この記事がお役に立ちましたらシェアお願いします
9,703 views

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

  1. delicatessen より:

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

    • K.Sugimoto より:

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

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

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

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

コメントを残す

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