2

我正在浏览 developer.android 页面以有效地加载位图,在这里:http: //developer.android.com/training/displaying-bitmaps/load-bitmap.html他们谈论将缩小版本加载到内存中,其中显然是非常有效的。

现在我的问题是给定的方法需要资源的 id,我们在从 Internet 下载图像/位图时没有得到(如果我在这里错了,请纠正我)。

那么有什么方法可以对从互联网下载的图像使用给定方法的一些变体?

4

1 回答 1

0

嘿,我不知道这种方法,但这是我从互联网下载图像并保存到 sd 卡的方法,您可以根据您的要求使用它我使用保存的方法保存图片

public class fetchImage extends Activity implements OnClickListener {
    int id;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        id = 1;// declaring static as of now

    }

    {

        new BackgroundTask().execute();
        File storagePath = Environment.getExternalStorageDirectory();
        File imgFile = new File(storagePath, "/Pictures/" + id + ".jpg");

        if (imgFile.exists()) {
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile
                    .getAbsolutePath());
        }

    }

    class BackgroundTask extends AsyncTask<Void, Void, Void> {
        ProgressDialog mDialog;

        protected void onPreExecute() {
            mDialog = ProgressDialog.show(fetchImage.this, "",
                    getString(R.string.progress_bar_loading), true);
        };

        @Override
        protected Void doInBackground(Void... params) {
            try {

                savesd(id, null);

            } catch (final Exception e) {

            }
            return null;
        }

        private void savesd(int id, URL uri) throws IOException {
            URL url;
            if (uri == null) {
                url = new URL("http://i.zdnet.com/blogs/3-29-androids.jpg");
            } else {
                url = uri;
            }
            InputStream input = url.openStream();
            try {
                File storagePath = Environment.getExternalStorageDirectory();
                OutputStream output = new FileOutputStream(new File(
                        storagePath, "/Pictures/" + id + ".jpg"));
                try {
                    byte[] buffer = new byte[20000];
                    int bytesRead = 0;
                    while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                        output.write(buffer, 0, bytesRead);
                    }
                } finally {
                    output.close();
                }
            } catch (Exception e) {

                e.printStackTrace();
            } finally {
                input.close();
            }

        }

        protected void onPostExecute(Void result) {
            mDialog.dismiss();
        };
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

    }

}
于 2012-11-02T05:28:43.340 回答