gpt4 book ai didi

java - 使用SD卡作为输入流(图像)android而不是内部存储器

转载 作者:行者123 更新时间:2023-12-01 15:25:10 25 4
gpt4 key购买 nike

我正在尝试从互联网上获取(使用下面的方法)图像并进行一些 Canvas 工作。但有时我会遇到内存不足异常。所以我想知道是否有办法将 inputStream 直接加载到存储卡而不是内部存储器中。

private Bitmap LoadImageFromWebOperations(String url)
{

try {
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
bitmap = ((BitmapDrawable)d).getBitmap().copy(Config.ARGB_8888, true);
return bitmap;
}catch (Exception e) {
System.out.println("Exc="+e);
return null;
}
}

logcat 说异常是由于该行引起的:

Drawable d = Drawable.createFromStream(is, "src name");

提前致谢!

最佳答案

我从 Fedor Vlasov 的惰性列表演示中获取了这段代码: Lazy load of images in ListView .

首先,您需要创建一个函数来将输入流复制到文件输出流:

public static void CopyStream(InputStream is, OutputStream os)
{
final int buffer_size=1024;
try
{
byte[] bytes=new byte[buffer_size];
for(;;)
{
int count=is.read(bytes, 0, buffer_size);
if(count==-1)
break;
os.write(bytes, 0, count);
}
}
catch(Exception ex){}
}

然后获取缓存文件夹:

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"MyCacheDir");
else
cacheDir=context.getCacheDir();
if(!cacheDir.exists())
cacheDir.mkdirs();

然后加载您的位图:

 private Drawable getBitmap(String url) 
{
String filename=URLEncoder.encode(url);
File f= new File(cacheDir, filename);

try {
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
InputStream is = conn.getInputStream();
OutputStream os = new FileOutputStream(f);
CopyStream(is, os);
os.close();

Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(f));
return new BitmapDrawable(bitmap);
} catch (Exception ex){
ex.printStackTrace();
return null;
}
}

关于java - 使用SD卡作为输入流(图像)android而不是内部存储器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10267918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com