[Andoidアプリ開発]Main外のクラスでCanvasに描画したものを端末のフォルダ内に保存をしたい。
受付中
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,120
Mainのクラス外で複数の画像をCanvasにつなげて描画し、それを端末内に保存するプログラムを書いているのですが、画像を保存するところで ContentResolverを使用しないと端末を再起動しなければギャラリーに表示がされません。
ですが、このプログラムを書いているクラスにはContextを渡していません。その為か、getContentResolver();でエラーが出てしまいます。
なるべくContextを渡さないで解決したいのですがいい方法は無いでしょうか?
package com.example.admin.saveimage1;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Environment;
import android.provider.MediaStore;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by admin on 2017/01/23.
*/
public class saveimage {
MainActivity ma = new MainActivity();
Resources r;
Bitmap pic1;
Bitmap pic2;
Bitmap pic3;
Bitmap pic4;
Bitmap pic5;
Bitmap pic6;
Bitmap pic7;
Bitmap pic8;
Bitmap pic9;
// Bitmap bitmap = BitmapFactory.decodeResource(ma.getresource(), R.drawable.source);
// int width = bitmap.getWidth(); // 元ファイルの幅取得
// int height = bitmap.getHeight(); // 元ファイルの高さ取得
// Bitmap bitmap1 = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// Canvas canvas = new Canvas(bitmap1);
//
// private Paint paint = new Paint();
Paint paint = new Paint();
String path = Environment.getExternalStorageDirectory().getPath();
File dir = new File(path + "/MyPhoto/");
File file1 = new File(dir.getAbsolutePath() + "/15_29066_12908.jpg");
File file2 = new File(dir.getAbsolutePath() + "/15_29066_12909.jpg");
File file3 = new File(dir.getAbsolutePath() + "/15_29067_12908.jpg");
File file4 = new File(dir.getAbsolutePath() + "/15_29067_12909.jpg");
File file5 = new File(dir.getAbsolutePath() + "/15_29068_12908.jpg");
File file6 = new File(dir.getAbsolutePath() + "/15_29068_12909.jpg");
File file7 = new File(dir.getAbsolutePath() + "/15_29066_12910.jpg");
File file8 = new File(dir.getAbsolutePath() + "/15_29067_12910.jpg");
File file9 = new File(dir.getAbsolutePath() + "/15_29068_12910.jpg");
public void savemap(Context context,Resources resource) {
Bitmap bitmap = BitmapFactory.decodeResource(resource, R.drawable.source);
int width = bitmap.getWidth(); // 元ファイルの幅取得
int height = bitmap.getHeight(); // 元ファイルの高さ取得
Bitmap bitmap1 = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap1);
// TODO Auto-generated constructor stub
try {
InputStream is = new FileInputStream(file1);
pic1 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file2);
pic2 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file3);
pic3 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file4);
pic4 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file5);
pic5 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file6);
pic6 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file7);
pic7 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file8);
pic8 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
InputStream is = new FileInputStream(file9);
pic9 = BitmapFactory.decodeStream(is);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
canvas.scale(3, 3);
canvas.drawBitmap(pic1, 0, 0, paint);
canvas.drawBitmap(pic2, 0, pic1.getWidth(), paint);
canvas.drawBitmap(pic3, pic1.getWidth(), 0, paint);
canvas.drawBitmap(pic4, pic1.getWidth(), pic1.getWidth(), paint);
canvas.drawBitmap(pic5, pic1.getWidth() * 2, 0, paint);
canvas.drawBitmap(pic6, pic1.getWidth() * 2, pic1.getWidth(), paint);
canvas.drawBitmap(pic7, 0, pic1.getWidth() * 2, paint);
canvas.drawBitmap(pic8, pic1.getWidth(), pic1.getWidth() * 2, paint);
canvas.drawBitmap(pic9, pic1.getWidth() * 2, pic1.getWidth() * 2, paint);
try {
saveBitmap(bitmap1);
} catch (Exception e) {
e.printStackTrace();
}
}
public void saveBitmap(Bitmap saveImage) throws IOException {
final String SAVE_DIR = "/MyPhoto";
File file = new File(Environment.getExternalStorageDirectory().getPath() + SAVE_DIR);
String fileName = "aaaa" + ".jpg";
String AttachName = file.getAbsolutePath() + "/" + fileName;
try {
FileOutputStream out = new FileOutputStream(AttachName);
saveImage.compress(Bitmap.CompressFormat.JPEG, 30, out);
out.flush();
out.close();
} catch(IOException e) {
e.printStackTrace();
throw e;
}
// save index
ContentValues values = new ContentValues();
ContentResolver contentResolver = getContentResolver();
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put("_data", AttachName);
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
Contextが無いとContentResolverは取得できません。
他のメソッドではContextを渡しているのにこのメソッドには渡さない理由はなんでしょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.13%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/01/24 20:05
Contextをほかのクラスにも渡してしまっているのですが、複数のクラスにContextは渡せるのでしょうか?
2017/01/24 20:09
ただ、フィールド変数で保持等は辞めた方がいいですが。
2017/01/24 20:30
Contextを自分なりに渡してみたのですが、それでもエラーが改善されません。。。
Contextの渡し方が悪いのかもしれないのですが。。
2017/01/24 20:41
ちなみにエラーはこのように出ています
Cannot resolve method
2017/01/24 20:55
実際にどのような書き方をしているのでしょうか。
2017/01/30 15:52
上記のsavemapでContextを取得しているので、それをsaveBitmapクラスに引き渡してという形でやってみましたがだめでした。
2017/01/30 16:09