图片流的压缩

今天我们学习了 图片流的压缩 现在我就把所学的讲个大家,到时如果有人用也可以借鉴一下

1这里先在activity布局里面写了一个imageview ,其余什么都没有

2,在MainActivity找到imageview的id,这部分就省略了

3,我是有异步加载也得所以就创建了一个类取名为A scly,在ascly中写入异步加载的框架,

(这里提醒一句:写完子线程记得要 .start一下,不然写完没作用)

4 在MainActivity中创建一个方法,我取名为 downLoadImg();里面传入参数就是String类型的,是一个网址的常量;

5,实现这个方法,这时方法类型中要写String 后面是一个常量 我写的 str ,在方法中把异步加载new出来(注意:要在这个类口号外要写 .exe,exe就是我异步加载里面的地方) 在方法qian();里面写 new progressD ialog,这时界面加载时转圈的那个类,让后再,show();


6:在hou();这个方法中写dialog.diamiss();和给图片设置显示的内容 iv.setImageBitmap(decodeFile);//把压缩好的图片给界面

7,这里是主要逻辑了就是zhong();这个方法中的逻辑;

(1)首先要new URL,这是联网的方法,我就把联网这部分的代码直接截图吧

第二个HttpURLConnection这里没有S一个方法是Https,这个地方要注意

(2)然后就判断code这个码是不是等于200,如果等于两百说名访问成功了,下面我就截图了,每一行都有备注,应该可以明白的



这里就是图片流压缩的全部代码,最后一步就是加联网的权限了;

一上是截图,为了方便小伙伴粘贴复制,我就把代码粘贴复制上来

Ascly类

public abstract class Ascly {
public abstract void qian();
public abstract void zhong();
public abstract void hou();
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
hou();
};
};
public void exe(){
qian();
new Thread(new Runnable() {
public void run() {
zhong();
handler.sendEmptyMessage(0);
}
}).start();
}
}

MainActivity类

public class MainActivity extends Activity {
private String path = "http://d.hiphotos.baidu.com/image/pic/item/eaf81a4c510fd9f9d4812968272dd42a2834a418.jpg";
private ImageView iv;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
downLaadImg(path);
}


private void downLaadImg(final String str) {
new Ascly() {

private ProgressDialog dialog;
private HttpURLConnection conn;
private InputStream inputStream;
private Bitmap decodeFile;
private BufferedInputStream buf;


@Override
public void zhong() {
try {
URL url = new URL(str);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
int code = conn.getResponseCode();
if (code==200) {
inputStream = conn.getInputStream();//得到一个流
buf = new BufferedInputStream(inputStream);//把流转化成缓冲流
buf.mark(buf.available());//给缓冲流一个标记
Options options = new BitmapFactory.Options();//new一个画图工厂 
options.inJustDecodeBounds=true;//只是测量一下边界,只看图片不看大小。
BitmapFactory.decodeStream(buf, null, options);//压缩流

float outHeight = options.outHeight;//得到网络图片的高
float outWidth = options.outWidth;//得到网络图片的高
System.out.println("高是"+outHeight+"宽是"+outWidth);

int scale = 1;//让缩放比例为1
WindowManager wm = getWindowManager();//得到屏幕管理者
Display display = wm.getDefaultDisplay();//得到屏幕的一个界面吧
float width = display.getWidth();//屏幕的宽
float height = display.getHeight();//屏幕的高
if (outWidth/width>outHeight/height||outHeight/height>outWidth/width) {
//让屏幕的宽高和网络体片的宽高作比较,谁大就取谁的

if (outWidth/width>outHeight/height) {
scale = (int) (outWidth/width);
}
else {
scale = (int) (outHeight/height);
}
}
//按什么比例压缩
options.inSampleSize=scale;
options.inJustDecodeBounds=false;
buf.reset();
decodeFile = BitmapFactory.decodeStream(buf, null, options);
inputStream.close();
buf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void qian() {
dialog = new ProgressDialog(MainActivity.this); 
dialog.show();

}

@Override
public void hou() {
dialog.dismiss();
iv.setImageBitmap(decodeFile);//把压缩好的图片给界面
}
}.exe();
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  作为信息时代象征的Internet的广泛使用是毋庸置疑的,作为Internet的终极用户,您可能经常有这种抱怨,我的机器够快的,但使用Internet时总觉得慢,作为ISP又抱怨用户不愿意掏钱买更好的线路,作为ICP又觉得没有太好的软件可以让数据的量变小,这种受带宽限制的Internet着实让很多人伤心,何不制作一个数据压缩程序,将数据压缩一下,让他变得快些呢,Web Server和IE提供了部分这样的功能,也就是将网页的内容进行压缩,但这仅仅是部分功能。   对于象地理信息系统,图书查询系统,ERP系统等的,Internet要传输的数据量相当大,而象图形数据、XML数据、文本数据其压缩率是相当高的,甚至可以压缩到百分之几,正是由于这个要求,我制作了这么两个软件:一是传输/文件的压缩软件,另一个是基于HTTP的压缩传输软件,这两个软件花费了我很多心血(尽管里面还有一些BUG),但我准备把他作为免费软件,来庆贺我的生日,如果你想使用或想得到源码请发邮件给我。   第一个软件,传输/文件的压缩,利用Internet中惯常使用的gzip, deflate算法,可以和sun java的GZipInputStream和GZipOutputStream互操作   第二个软件,基于HTTP的压缩传输软件,可完全和IE的VBScript和JScript无缝融合   更详细信息请看使用文档Help.doc   例子文件包含这么几个: readme.doc 本文件 help.doc 帮助文档 GZCore.dll gzip,deflate压缩/解压程序,使用前必须注册 GZUtil.dll GZCore.dll的缓冲区处理封装,用于Web的处理,使用前必须注册 GZip4Web.dll 基于Web的压缩文件/的传送,使用前必须注册 Test.zip 第一个产品的例子, C++代码工程 Temp.asp 第一个产品的例子, 直接用压缩程序发送GZip SvrRecv.asp 第二个产品的例子,用于服务端处理接受的压缩 SvrSend.asp 第二个产品的例子,用于服务端处理发送的压缩 default.asp 第二个产品的例子,用于客户端处理处理接受文件,GZip   如果您有好的建议或BUG汇报,请邮件给我,我先表示感谢。   重要说明,此软件不允许使用于商业用途,否则会受到牵连。   另注,由于本软件使用带来的任何损失,软件制作者概不负责。    Ashley Wang [email protected] 2001.12.24

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值