ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
AsyncTask : インターネット画像表示と画像保存
日時: 2017/07/04 20:39
名前: lightbox



ファイル保存は okio で(streamCopy)
拡張子:
public class MainActivity extends AppCompatActivity {

	ImageView imageView;
	ImageView imageViewSaved;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		imageView = (ImageView) MainActivity.this.findViewById(R.id.imageView);
		imageViewSaved = (ImageView) MainActivity.this.findViewById(R.id.imageViewSaved);

		// カラー(Drawable)
		MainActivity.this.findViewById(R.id.buttonWeb1).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				new AsyncTask<String, Void, Drawable>() {

					// 非同期処理
					@Override
					protected Drawable doInBackground(String... params) {
						Drawable drawable = null;

						try {
							// インターネット上の画像を取得して、Drawable に変換
							URL url = new URL( params[0] );
							InputStream inputStream = (InputStream)url.getContent();
//							drawable = Drawable.createFromStream(inputStream, "");

							// inputStream を Drawable で読み込み
							drawable = new BitmapDrawable(MainActivity.this.getResources(), inputStream);
							inputStream.close();

							Log.i("lightbox", drawable.getIntrinsicWidth()+"");

						} catch (IOException e) {
							e.printStackTrace();
						}

						return drawable;
					}

					@Override
					protected void onPostExecute(Drawable drawable) {

						if (drawable != null) {
							imageView.setImageDrawable(drawable);
						}

					}
				}.execute("https://lightbox.sakura.ne.jp/demo/image/sample.jpg");

			}
		});

		// モノクロ最大(Drawable > Bitmap > DENSITY_DEFAULT)
		MainActivity.this.findViewById(R.id.buttonWeb2).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				new AsyncTask<String, Void, Drawable>() {

					// 非同期処理
					@Override
					protected Drawable doInBackground(String... params) {
						Drawable drawable = null;

						try {
							// インターネット上の画像を取得して、Drawable に変換
							URL url = new URL( params[0] );
							InputStream inputStream = (InputStream)url.getContent();
							drawable = new BitmapDrawable(MainActivity.this.getResources(), inputStream);
							inputStream.close();

						} catch (IOException e) {
							e.printStackTrace();
						}

						return drawable;
					}

					@Override
					protected void onPostExecute(Drawable drawable) {

						if (drawable != null) {
							Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
							bitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT);
							imageView.setImageBitmap(bitmap);
						}

					}
				}.execute("https://lightbox.sakura.ne.jp/demo/image/sample_mono.jpg");

			}
		});

		// スケッチ、そのまま(Bitmap)
		MainActivity.this.findViewById(R.id.buttonWeb3).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				new AsyncTask<String, Void, Bitmap>() {

					// 非同期処理
					@Override
					protected Bitmap doInBackground(String... params) {
						Bitmap bitmap = null;

						BitmapFactory.Options options;
						try {
							// インターネット上の画像を取得して、Bitmap に変換
							URL url = new URL(params[0]);
							options = new BitmapFactory.Options();

							// 実際に読み込む( デフォルトで false )
							Log.i("lightbox",options.inJustDecodeBounds+"");
							options.inJustDecodeBounds = false;

							InputStream inputStream = (InputStream) url.getContent();
							// inputStream を Bitmap で読み込み
							bitmap = BitmapFactory.decodeStream(inputStream, null, options);
							inputStream.close();

						} catch (IOException e) {
							e.printStackTrace();
						}

						return bitmap;
					}

					// UI スレッド処理
					@Override
					protected void onPostExecute(Bitmap bitmap) {

						// Bitmap 取得に成功している場合は表示します
						if (bitmap != null) {
							imageView.setImageBitmap(bitmap);
						}

					}
				}.execute("https://lightbox.sakura.ne.jp/demo/image/sample_sketch.jpg");
			}
		});

		// カラーを保存して表示
		MainActivity.this.findViewById(R.id.buttonSave1).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				new AsyncTask<String, Void, Void>() {

					// 非同期処理
					@Override
					protected Void doInBackground(String... params) {
						Bitmap bitmap;

						BitmapFactory.Options options;
						try {
							// インターネット上の画像を保存
							URL url = new URL(params[0]);
							InputStream inputStream = (InputStream) url.getContent();
							OutputStream outputStream = MainActivity.this.openFileOutput("sample.jpg", MODE_PRIVATE);
							streamCopy(inputStream,outputStream);

						} catch (Exception e) {
							e.printStackTrace();
						}

						return null;
					}

					// UI スレッド処理
					@Override
					protected void onPostExecute(Void aVoid) {

						try {

							// 保存したファイルを読み込む
							InputStream inputStream = MainActivity.this.openFileInput("sample.jpg");
							Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
							inputStream.close();
							imageViewSaved.setImageBitmap(bitmap);

						} catch (IOException e) {
							e.printStackTrace();
						}


					}
				}.execute("https://lightbox.sakura.ne.jp/demo/image/sample.jpg");

			}
		});

		// モノクロを保存して表示
		MainActivity.this.findViewById(R.id.buttonSave2).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				new AsyncTask<String, Void, Void>() {

					// 非同期処理
					@Override
					protected Void doInBackground(String... params) {
						Bitmap bitmap;

						BitmapFactory.Options options;
						try {
							// インターネット上の画像を保存
							URL url = new URL(params[0]);
							InputStream inputStream = (InputStream) url.getContent();
							OutputStream outputStream = MainActivity.this.openFileOutput("sample_mono.jpg", MODE_PRIVATE);
							streamCopy(inputStream,outputStream);

						} catch (Exception e) {
							e.printStackTrace();
						}

						return null;
					}

					// UI スレッド処理
					@Override
					protected void onPostExecute(Void aVoid) {

						try {

							// 保存したファイルを読み込む
							InputStream inputStream = MainActivity.this.openFileInput("sample_mono.jpg");
							Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
							inputStream.close();

							Log.i("lightbox", bitmap.getWidth()+"");		// 400
							Log.i("lightbox", bitmap.getDensity()+"");	// Nexus 4 : 320, Nexus S : 240
							// 大きく
							bitmap.setDensity(160);

							imageViewSaved.setImageBitmap(bitmap);

						} catch (IOException e) {
							e.printStackTrace();
						}


					}
				}.execute("https://lightbox.sakura.ne.jp/demo/image/sample_mono.jpg");
			}
		});

		// スケッチ
		MainActivity.this.findViewById(R.id.buttonSave3).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View view) {

				new AsyncTask<String, Void, Void>() {

					// 非同期処理
					@Override
					protected Void doInBackground(String... params) {
						Bitmap bitmap;

						BitmapFactory.Options options;
						try {
							// インターネット上の画像を保存
							URL url = new URL(params[0]);
							InputStream inputStream = (InputStream) url.getContent();
							OutputStream outputStream = MainActivity.this.openFileOutput("sample_sketch.jpg", MODE_PRIVATE);
							streamCopy(inputStream,outputStream);

						} catch (Exception e) {
							e.printStackTrace();
						}

						return null;
					}

					// UI スレッド処理
					@Override
					protected void onPostExecute(Void aVoid) {

						try {

							// 保存したファイルを読み込む
							InputStream inputStream = MainActivity.this.openFileInput("sample_sketch.jpg");
							Drawable drawable = new BitmapDrawable(MainActivity.this.getResources(), inputStream);
							inputStream.close();

							Log.i("lightbox", drawable.getIntrinsicWidth()+"");

							imageViewSaved.setImageDrawable(drawable);

						} catch (IOException e) {
							e.printStackTrace();
						}


					}
				}.execute("https://lightbox.sakura.ne.jp/demo/image/sample_sketch.jpg");

			}
		});
	}

	// *************************
	// ファイルコピー
	// *************************
	private void streamCopy(InputStream inputStream, OutputStream outputStream) throws Exception {

		Source source = Okio.source(inputStream);
		BufferedSink bufferedSink = Okio.buffer(Okio.sink(outputStream));
		bufferedSink.writeAll(source);

		bufferedSink.close();
		source.close();

	}

}
メンテナンス


日時: 2017/07/04 20:39
名前: lightbox