0

所以我在AsyncTask. 获取图像文件的AsyncTaskurl,将其下载到 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,这就是我要问的问题。当然,如果这些假设有任何问题,请指出。

4

1 回答 1

-1

为什么在解码位图 Stream 时使用位图工厂选项?只需使用

 Bitmap image = BitmapFactory.decodeStream(image_url.openStream());

代替

Bitmap image = BitmapFactory.decodeStream(image_url.openStream(), null, bitmap_options);
于 2013-02-15T08:59:01.153 回答