png和jpg作为两种最常用的图片格式,首先我们要知道他们的区别:

1.从一般图片的外观上来说,他们是无法直接判断的

2.从文件大小上来说,同样一张图png肯定比jpg的大

3.通过查资料咱们可以发现,png即可移植网络图形格式,也是一种位图文件存储格式,可以进行无损压缩。而jpg是我们最常见的图片格式了,图片占用存储较少,但是也牺牲了图片质量。

总结为一句话是两者最大的区别是有损和无损。

而出现加载透明png图片变黑的问题,一般情况下这样的:

服务端的图片是透明png的无损图片,我们下载到本地的时候强制把它处理为了jpg的形式,造成图片质量有损。

jpg图片是没有背景透明这个概念的。

图片下载保存到本地SD卡的工具方法,可以使用如下代码:

  /**
* 将文件写到本地缓存
* @param fileName
* @param in
* @param length 总的文件长度
* @param callBack 下载回调接口
*/
private static void writeToLocal(String fileName, InputStream in,int length,DownloadCallback callback) {
if(in == null) {
return;
}
FileOutputStream out = null;
byte[] buffer = new byte[1024];
int len = -1;
long count = 0;
try {
out = new FileOutputStream(fileName);// 为图片文件实例化输出流
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
count += len; if(callback != null) {
callback.onDownload(length, count, false, false);
}
} if(callback != null) {
callback.onDownload(length, count, true, false);
} out.flush();
out.close();
in.close();
} catch (IOException e1) {
e1.printStackTrace();
try {
if (out != null) {
out.close();
out = null;
} in.close();
in = null;
} catch (IOException e) {
e.printStackTrace();
} // 网络出现异常,删除下载文件
new File(fileName).delete();
if(callback != null) {
callback.onDownload(length, count, false, true);
}
}
}

Android-加载透明PNG图片变黑的问题的更多相关文章

  1. Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】

    Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)[系列1] Android在加载或者处理超大巨型图片 ...

  2. android加载更多的图片

    这是昨天改进后的,我测试了下,可以加载图片到5万张,估计5万以上也是没问题的,我只试到5万,其实也没必要这么高,现实中1000左右就差不多了,不过我的应用到100就差不多了, package com. ...

  3. vc++加载透明png图片方法-GDI+和CImage两种

    转载自:http://blog.csdn.net/zhongbin104/article/details/8730935 先看看GDI+的方法方法1:   1.GDI+画透明图层(alpha)的png ...

  4. android 加载图片框架--Glide使用详解

    一.简介 Glide,一个被google所推荐的图片加载库,作者是bumptech.这个库被广泛运用在google的开源项目中,包括2014年的google I/O大会上发布的官方app.(PS:众所 ...

  5. Android学习笔记_51_转android 加载大图片防止内存溢出

    首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...

  6. Android加载图片OOM错误解决方式

    前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...

  7. Android开发技巧——TextView加载HTML的图片及代码显示问题

    前几天在做一个Gradle用户指南的应用程序,使用的是TextView来加载HTML内容(至于为什么不用WebView,我也没有认真使用并比较过,也许以后会换吧),其中遇见了一些纠结的问题,所幸主要的 ...

  8. Android加载图片的策略

    实现图片缓存也不难,需要有相应的cache策略.这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且 ...

  9. android加载gif图片

    Android加载GIF图片的两种方式 方式一:使用第三开源框架直接在布局文件中加载gif 1.在工程的build.gradle中添加如下 buildscript { repositories { m ...

随机推荐

  1. java多线程总结二:后台线程(守护线程)

    所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分.因此当所有的非后台线程结束时,程序也就终止了,同时会杀死所有后台线程.反过来说,只要有任何非 ...

  2. 在有大量数据时 少用In(数据会丢失) 用left join 代替

    select @From, @To, EffectiveDate, GETDATE(), Rate from Config_Currency_ExchangeRate_Temp where Effec ...

  3. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法

    Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法 在上一篇笔记中我们介绍了Ext.Net的简单用法,并创建了一个简单的登录表单.今天我们将看一下如何更好是使用FormPanel ...

  4. shell 数组

    数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array ...

  5. 【html】【19】高级篇--大事件时间轴

    下载: http://sc.chinaz.com/jiaoben/131112181390.htm 其它: http://sc.chinaz.com/tag_jiaoben/shijianzhou.h ...

  6. NOIP200701

    题是这样的: 试题描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同,再 ...

  7. HDOJ1005 数列

    Problem Description A number sequence is defined as follows:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) ...

  8. jQuery—一些常见方法(2)DOM操作【insertBefore(),insertAfter(),appendTo(),prependTo(),before(),after(),append(),prepend(),remove(),on(),off(),scrollTop()】

    一.insertBefore() 如下代码:找到span标签,将span标签剪切到div的前面 <!DOCTYPE html> <html lang="en"&g ...

  9. ACE 6.2.0 win7_64 编译

    Windows平台 ~ Microsoft Visual Studio 1)        下载ACE源码 ACE官方网址:http://www.cs.wustl.edu/~schmidt/ACE.h ...

  10. puppet 部署 horizon server 所需的参数和部署逻辑

    所需要的参数:   $secret_key,   $bind_address = '127.0.0.1',   $cache_server_ip = '127.0.0.1',   $cache_ser ...