|
日時: 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();
}
}
|