所以我在AsyncTask
中有以下代码。 AsyncTask
接收图像文件的网址,将其下载到位图中,将位图保存到某个位置的磁盘,然后在现有ImageView
中显示位图。
这是我对AsyncTask的doInBackground()
调用的实现:
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
。选项设置是我迄今为止尝试过的内容,但它们似乎没有用。
请注意,我并未询问保存到外部存储的图像。我认为由于再次压缩会导致质量较差,但这不应该影响我发送到ImageView
的图像,这就是我要问的问题。 。当然,如果这些假设出现任何问题,请指出。
答案 0 :(得分:-1)
为什么在解码位图Stream时使用Bitmap工厂选项? 只需使用
即可 Bitmap image = BitmapFactory.decodeStream(image_url.openStream());
而不是
Bitmap image = BitmapFactory.decodeStream(image_url.openStream(), null, bitmap_options);