Android菜鸟成长记15 -- BitMap

摘要:
BitMap简介Bitmap是Android系统中的图像处理的最重要类之一。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。format:Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEGquality:画质,0-100.0表示最低画质压缩,100以最高画质压缩。使用BitmapFactory可从资源files,streams,andbyte-arrays中解码生成Bitmap对象。publicstaticBitmapdecodeFilepublicstaticBitmapdecodeFile读取一个资源文件得到一个位图。)publicstaticBitmapdecodeResourcepublicstaticBitmapdecodeResource从输入流中解码位图publicstaticBitmapdecodeStream从字节数组中解码生成不可变的位图publicstaticBitmapdecodeByteArrayBitmapDrawable类:继承于Drawable,你可以从文件路径、输入流、XML文件以及Bitmap中创建。

BitMap简介

Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。

BitMap的常用属性

1. BitMap类
public void recycle()——回收位图占用的内存空间,把位图标记为Dead
public final boolean isRecycled() ——判断位图内存是否已释放
public final int getWidth()——获取位图的宽度
public final int getHeight()——获取位图的高度
public final boolean isMutable()——图片是否可修改
public int getScaledWidth(Canvas canvas)——获取指定密度转换后的图像的宽度
public int getScaledHeight(Canvas canvas)——获取指定密度转换后的图像的高度
public boolean compress(CompressFormat format, int quality, OutputStream stream)——按指定的图片格式以及画质,将图片转换为输出流。
format:Bitmap.CompressFormat.PNG或Bitmap.CompressFormat.JPEG
quality:画质,0-100.0表示最低画质压缩,100以最高画质压缩。对于PNG等无损格式的图片,会忽略此项设置。
常用的静态方法:
public static Bitmap createBitmap(Bitmap src) ——以src为原图生成不可变得新图像
public static Bitmap createScaledBitmap(Bitmap src, int dstWidth,
int dstHeight, boolean filter)——以src为原图,创建新的图像,指定新图像的高宽以及是否可变。
public static Bitmap createBitmap(int width, int height, Config config)——创建指定格式、大小的位图
public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height)以source为原图,创建新的图片,指定起始坐标以及新图像的高宽。
2. BitmapFactory工厂类:
Option 参数类:
public boolean inJustDecodeBounds——如果设置为true,不获取图片,不分配内存,但会返回图片的高度宽度信息。
public int inSampleSize——图片缩放的倍数。如果设为4,则宽和高都为原来的1/4,则图是原来的1/16。
public int outWidth——获取图片的宽度值
public int outHeight——获取图片的高度值
public int inDensity——用于位图的像素压缩比
public int inTargetDensity——用于目标位图的像素压缩比(要生成的位图)
public boolean inScaled——设置为true时进行图片压缩,从inDensity到inTargetDensity。
使用BitmapFactory 可从资源files, streams, and byte-arrays中解码生成Bitmap对象。
读取一个文件路径得到一个位图。如果指定文件为空或者不能解码成文件,则返回NULL。
public static Bitmap decodeFile(String pathName, Options opts)
public static Bitmap decodeFile(String pathName)
读取一个资源文件得到一个位图。如果位图数据不能被解码,或者opts参数只请求大小信息时,则返回NuLL。
(即当Options.inJustDecodeBounds=true,只请求图片的大小信息。)
public static Bitmap decodeResource(Resources res, int id)
public static Bitmap decodeResource(Resources res, int id, Options opts)
从输入流中解码位图
public static Bitmap decodeStream(InputStream is)
从字节数组中解码生成不可变的位图
public static Bitmap decodeByteArray(byte[] data, int offset, int length)
BitmapDrawable类:继承于Drawable,你可以从文件路径、输入流、XML文件以及Bitmap中创建。
常用的构造函数:
Resources res=getResources();//获取资源
public BitmapDrawable(Resources res)——创建一个空的drawable。(Response用来指定初始时所用的像素密度)替代public BitmapDrawable()方法(此方法不处理像素密度)
public BitmapDrawable(Resources res, Bitmap bitmap)——Create drawable from a bitmap
public BitmapDrawable(Resources res, String filepath)——Create a drawable by opening a given file path and decoding the bitmap.
public BitmapDrawable(Resources res, java.io.InputStream is)——Create a drawable by decoding a bitmap from the given input stream.

BitMap通过网络连接获取图片例子:

1 package com.example.bitmaodemo;
2 
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.net.HttpURLConnection;
6 import java.net.MalformedURLException;
7 import java.net.URL;
8 
9 import android.app.Activity;
10 import android.graphics.Bitmap;
11 import android.graphics.BitmapFactory;
12 import android.os.Bundle;
13 import android.os.Handler;
14 import android.os.Message;
15 import android.util.Log;
16 import android.view.View;
17 import android.view.View.OnClickListener;
18 import android.widget.Button;
19 import android.widget.ImageView;
20 import android.widget.Toast;
21 
22 public classMainActivity extends Activity {
23     privateThread tr;
24     privateBitmap bitmap;
25     privateRunnable run;
26 
27     privateButton btn;
28     privateImageView iv;
29     privateHandler handler;
30     
31     //图片的路径,百度随便一张即可
32     private static final String url_img = "http://p4.music.126.net/UVauLiOkCCNWR-XBMIDawg==/3437073360051219.jpg";
33 
34 @Override
35     protected voidonCreate(Bundle savedInstanceState) {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.activity_main);
38 
39         btn =(Button) findViewById(R.id.btn);
40         iv =(ImageView) findViewById(R.id.imageView1);
41 
42         btn.setOnClickListener(newOnClickListener() {
43 
44 @Override
45             public voidonClick(View arg0) {
46                 //获取一个新的线程,当点击按钮的时候将图下载下来
47                 new Thread(newRunnable() {
48 
49 @Override
50                     public voidrun() {
51                         try{
52                             //获取图片的路径
53                             URL url = newURL(url_img);
54                             //创建一个网络连接
55                             HttpURLConnection conn =(HttpURLConnection) url
56 .openConnection();
57 conn.connect();
58                             //获取一个输入流,读取上面网络连接的信息
59                             InputStream is =conn.getInputStream();
60                             if (is != null) {
61                                 Log.i("info", "----------------");
62                                 /*
63 * 使用BitmapFactory 可从资源files, streams, and byte-arrays中解码生成Bitmap对象。
64 *读取一个文件路径得到一个位图。如果指定文件为空或者不能解码成文件,则返回NULL。
65                                  */
66                                 bitmap = BitmapFactory.decodeStream(is);
67 }
68                             
69                             Message message = newMessage();
70                             message.obj =bitmap;
71                             message.what = 0;
72                             //向handler发送信息,可以跟新UI了
73 handler.sendMessage(message);
74 
75                         } catch(MalformedURLException e) {
76                             //TODO Auto-generated catch block
77 e.printStackTrace();
78                         } catch(IOException e) {
79                             //TODO Auto-generated catch block
80 e.printStackTrace();
81 }
82 
83 }
84 
85 }).start();
86 }
87 });
88 
89         handler = newHandler() {
90 @Override
91             public voidhandleMessage(Message msg) {
92                 switch(msg.what) {
93                 case 0:
94                     Log.i("info", "ss" +msg.obj);
95 iv.setImageBitmap((Bitmap) msg.obj);
96                     break;
97 }
98 }
99 };
100 
101 }
102 }

由于BitMap是不能在主线程中运行的,所以我们需要用其他线程来执行对图片的读取。

结果:

Android菜鸟成长记15 -- BitMap第1张

点击按钮后:

Android菜鸟成长记15 -- BitMap第2张

免责声明:文章转载自《Android菜鸟成长记15 -- BitMap》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇codeblocks-17.12mingw-nosetup(mingw编译,绿色免安装版)的下载、安装及设置一码元、符号、波特率、比特率等概念的了解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android避免OOM(内存优化)

Android内存优化是性能优化很重要的一部分,而如何避免OOM又是内存优化的核心。 Android内存管理机制 android官网有一篇文章 Android是如何管理应用的进程与内存分配 Android系统的Dalvik虚拟机扮演了内存垃圾自动回收的角色。 OOM介绍(out of memory 内存溢出) Android和java中都会出现由于不良代...

【Windows编程】系列第五篇:GDI图形绘制

上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图。Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解。GDI可以绘制点、直线曲线、填充封闭区域、位图以及文本,其中文本部分已经在上一篇中将了,请参考【...

python中bitmap的参数

Tkinter Bitmaps: 你会使用这个属性显示一个位图。有以下类型的可用位图. 你会使用这个属性显示一个位图。有以下类型的可用位图.: "error" "gray75" "gray50" "gray25" "gray12" "hourglass" "info" "questhead" "question" "warning"...

C# Html网页生成图片解决方案1

1.使用System.Windows.Forms命名空间下的WebBrowser控件加载网页并生成图片 GiHub参考地址: https://github.com/tianma3798/FileOparate/ 使用方法: public static voidTestOne() { ThumbnailImg img = new Thumbnai...

Android Glide加载视频封面

/** *   context 上下文 *   uri 视频地址 *   imageView 设置image *   frameTimeMicros 获取某一时间帧 */ public void loadVideoScreenshot(final Context context, String ur...

Android Wear开发

本节由介绍3种数据的发送接收:1.Data Items : 比特类型数据,限制100KB以内2.Assets : 资源类型数据,大小无上限3.Message : 发送消息,触发指令 http://developer.android.com/training/wearables/data-layer/data-items.html 1.Syncing Dat...