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

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

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

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

1private boolean ScreenShot(ImageView imgView, String filename) {
2    try {
3        FileOutputStream out = openFileOutput(filename, MODE_PRIVATE);
4 
5        imgView.setDrawingCacheEnabled(false); //タイミングを確実にするために一旦falseに
6        imgView.setDrawingCacheEnabled(true);
7 
8        Bitmap bmp = Bitmap.createBitmap(imgView.getDrawingCache());
9        bmp.compress(CompressFormat.PNG, 100, out);
10 
11        out.close();
12 
13        return true;
14 
15    } catch (FileNotFoundException e) {
16        e.printStackTrace();
17        return false;
18    } catch (IOException e) {
19        e.printStackTrace();
20        return false;
21    }
22}

SDカードに保存する場合

1private String PATH = Environment.getExternalStorageDirectory().toString();
2private Uri IMAGE_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
3 
4private boolean ScreenShot(ImageView imgView, String filename) {
5    try {
6        File file = new File(PATH, filename);
7        FileOutputStream out = new FileOutputStream(file);
8 
9        imgView.setDrawingCacheEnabled(false);
10        imgView.setDrawingCacheEnabled(true);
11 
12        Bitmap bmp = Bitmap.createBitmap(imgView.getDrawingCache());
13        bmp.compress(CompressFormat.JPEG, 100, out);
14        out.close();
15 
16        ContentResolver cr = getContentResolver();
17 
18        long dateTaken = System.currentTimeMillis();
19 
20        ContentValues values = new ContentValues(5);
21 
22        values.put(Images.Media.TITLE, "name");
23        values.put(Images.Media.DISPLAY_NAME, filename);
24        values.put(Images.Media.DATE_TAKEN, dateTaken);
25        values.put(Images.Media.MIME_TYPE, "image/jpeg");
26        values.put(Images.Media.DATA, PATH + "/" + filename);
27 
28        cr.insert(IMAGE_URI, values);
29 
30        return true;
31 
32    } catch (FileNotFoundException e) {
33        e.printStackTrace();
34        return false;
35    } catch (IOException e) {
36        e.printStackTrace();
37        return false;
38    }
39}
この記事がお役に立ちましたらシェアお願いします
9,768 views

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

  1. delicatessen より:

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

    • K.Sugimoto より:

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

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

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

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

delicatessen へ返信する コメントをキャンセル

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