转载自:http://www.cnblogs.com/yourancao520/archive/2012/06/25/2561367.html
之前从网上获取图片并保存到Sd卡中是用的BitmapFactory的decodeStream()方法,在2.3版及以上版本下没有问题,但是底于2.3的版本就会出问题.
代码debug的时候不出问题,但是直接运行就是出错,从网上查了查,有的说是网速不太好的情况下,会获取不了图片,有的说是低版本的API上会出现解码问题
之前的代码 (BitmapFactory.decodeStream):
Bitmap bitmapFact = BitmapFactory.decodeStream(getImageStream(picUrl));
saveFile(bitmapFact, pic.getPicName(),
pic.getModifyTime());
/**
* 从网络上获取图片,并返回输入流
*
* @param path
* 图片的完整地址
* @return InputStream
* @throws Exception
*/
public InputStream getImageStream(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(10 * 1000);
conn.setConnectTimeout(10 * 1000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
return conn.getInputStream();
}
return null;
}
/**
* 保存文件
*
* @param bm
* 位图
* @param fileName
* 文件名
* @param modifyTime
* 修改时间
* @throws IOException
*/
public void saveFile(Bitmap bm, String fileName, String modifyTime)
throws IOException {
File myCaptureFile = new File(ALBUM_PATH + fileName);// 创建文件
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
}
saveFile(bitmapFact, pic.getPicName(),
pic.getModifyTime());
/**
* 从网络上获取图片,并返回输入流
*
* @param path
* 图片的完整地址
* @return InputStream
* @throws Exception
*/
public InputStream getImageStream(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(10 * 1000);
conn.setConnectTimeout(10 * 1000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
return conn.getInputStream();
}
return null;
}
/**
* 保存文件
*
* @param bm
* 位图
* @param fileName
* 文件名
* @param modifyTime
* 修改时间
* @throws IOException
*/
public void saveFile(Bitmap bm, String fileName, String modifyTime)
throws IOException {
File myCaptureFile = new File(ALBUM_PATH + fileName);// 创建文件
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(myCaptureFile));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
}
修改之后的 (BitmapFactory.decodeByteArray):
Bitmap bitmapFact = this.getImage(picUrl);
saveFile(bitmapFact, pic.getPicName(),pic.getModifyTime());
public Bitmap getImage(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(10 * 1000);
conn.setConnectTimeout(10 * 1000);
conn.setRequestMethod("GET");
InputStream is = null;
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
is = conn.getInputStream();
} else {
is = null;
}
if (is == null){
throw new RuntimeException("stream is null");
} else {
try {
byte[] data=readStream(is);
if(data!=null){
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
is.close();
return null;
}
}
/*
* 得到图片字节流 数组大小
* */
public static byte[] readStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();
}
saveFile(bitmapFact, pic.getPicName(),pic.getModifyTime());
public Bitmap getImage(String path) throws Exception {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(10 * 1000);
conn.setConnectTimeout(10 * 1000);
conn.setRequestMethod("GET");
InputStream is = null;
if(conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
is = conn.getInputStream();
} else {
is = null;
}
if (is == null){
throw new RuntimeException("stream is null");
} else {
try {
byte[] data=readStream(is);
if(data!=null){
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
}
is.close();
return null;
}
}
/*
* 得到图片字节流 数组大小
* */
public static byte[] readStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len=inStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
}
outStream.close();
inStream.close();
return outStream.toByteArray();
}
相关推荐
BitmapFactory.Options的使用是在加载图片时,就从图片的加载和使用说起 怎样获取图片的大小? 首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了。 新问题又...
因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap...
如何从网络中获取一张图片,并显示出来?? 首先应想到若要从网络资源中获取图片,就需要通过流操作,于是就想到如何创建流...第四步:利用BitmapFactory.decodeStream()方法直接将图片流解码为bitmap 第五步:送去显示
b=(Button)this.findViewById(R.id.b);//图片浏览按钮 et=(EditText)this.findViewById(R.id.et);... bitmap = BitmapFactory.decodeStream(is);//将InputStream变成Bitmap is.close();//关闭InputStream
BitMap,BitMapFactory,android 主要为了处理图片,分享下
加载并显示一副图像对内存使用情况有显著的影响,Android提供了一个名为BitmapFactory 的实用程序类,该程序提供了一系列的静态方法,允许通过各种来源加载Bitmap图像。针对我们的需求,将从文件加载图像,并在最初...
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); ImageView imageView = (ImageView) findViewById(R.id.imgview_src); /* 将Bitmap设定到ImageView */ imageView.setImageBitmap(bitmap...
绿色部分是发生一个广播通知系统重新扫描制定文件,这样我们就可以在图库本地图片中看到拍摄的图片。 3、最后记得在清单文件中加入调用系统相机和保存文件权限 <uses-permission android:name="android....
Delegate implementing the native methods of android.graphics.BitmapFactory.
从Andorid API级别11(蜂窝)开始,BitmapFactory在解码位图时提供重用机制:如果设置了BitmapFactory.Options.inBitmap,则采用Options对象的解码方法将在加载内容时尝试重用此位图。 从KITKAT开始,BitmapFactory...
android简单工厂模式的一个实例
Android系统中图片一般用Bitmap对象表示,它支持png,jpg等常见格式。通常情况下图片的体积都比较大,单个应用允许使用的内存又是有限的,所以我们需要采取一些手段减少内存占用并提高加载速度。 1、图片加载 SDK...
我就废话不多说了,大家还是直接看代码吧~ //Uri.parse(file://+result.getImage... //方法一:通过uri把图片转化为bitmap的方法 Bitmap bitmap= BitmapFactory.decodeFile(path); int height= bitmap.get
在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是...
Listview中图片的压缩处理后,成功避免了曾出现的OOM异常。 可以查看我的博客文章:http://blog.csdn.net/u012440207/article/details/37910047
##描述ImageFactory 与 BitmapFactory 非常相似,但如果解码的图像是动画 GIF 或 BitmapDrawable,则返回 GifDrawable 如果不是。 取决于 最低 API 级别 8 将此添加到 build.gradle 依赖项,将 xxx 替换为版本号...
Android 设置手机屏幕壁纸,不能就是大家熟悉的桌面背景,点击按钮,即可更换手机背景图片,整个功能的实现,封装在一个按钮事件中,以下是相关的代码片段: Button bbjt;//设置背景图按钮 EditText etwz;//网站...
BitmapFactory.Options