所以我在AsyncTask
. 获取图像文件的AsyncTask
url,将其下载到 Bitmap,将 Bitmap 保存到磁盘的某个位置,然后在现有的ImageView
.
这是doInBackground()
我的 AsyncTask 调用的实现:
protected Bitmap doInBackground(String... urls) {
try {
URL image_url = new URL(urls[0]);
String image_url_prefix_regex = "http://www\\.somewebsite\\.com";
if (externalStorageIsAvailable()) {
String file_path = getExternalFilesDir(null).getPath() + image_url.toString().replaceAll(image_url_prefix_regex, "");
File target_file = new File(file_path);
if (!target_file.getParentFile().exists()) {
target_file.getParentFile().mkdirs();
}
BitmapFactory.Options bitmap_options = new BitmapFactory.Options();
bitmap_options.inScaled = false;
bitmap_options.inDither = false;
bitmap_options.inPreferredConfig = Bitmap.Config.ARGB_8888;
bitmap_options.inPreferQualityOverSpeed = true;
bitmap_options.inSampleSize = 1;
Bitmap image = BitmapFactory.decodeStream(image_url.openStream(), null, bitmap_options);
image.compress(CompressFormat.JPEG, 100, new FileOutputStream(target_file));
return image;
}
}
catch (MalformedURLException e) {
Log.v(DEBUG_TAG, "Error: Caught MalformedURLException");
}
catch (IOException e) {
Log.v(DEBUG_TAG, "Error: Caught IOException");
}
return null;
}
然后在onPostExecute()
通话后期我有这个:
protected void onPostExecute(Bitmap image) {
ImageView mImageView = (ImageView) findViewById(R.id.main_image);
mImageView.setImageBitmap(image);
}
然而,当代码下载并显示图像时,图像的大小和质量都会降低。如何使生成的图像具有完整质量?那些BitmapFactory
.Options 设置是我迄今为止尝试过的东西,但它们似乎不起作用。
请注意,我不是在询问保存到外部存储的图像。我认为由于再次压缩而可能会降低质量,但这不应该影响我发送到 my 的图像ImageView
,这就是我要问的问题。当然,如果这些假设有任何问题,请指出。