图像图像处理

ImageView:用于显示普通静态图片;

AnimationDrawable:用于开发逐帧动画;

Animation:用于对普通图片使用补间动画;

Bitmap、BitmapFactory

Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象。

开发者为了把一个Bitmap对象包装成BitmapDrawable对象,可以调用BitmapDrawable的构造器:

  BitmapDrawable drawable= new BitmapDrawable(bitmap);

如果需要获取BitmapDrawable所保证的bitmap对象,则可调用BitmapDrawable的getBitmap(),Eg:Bitmap bitmap = drawable.getBitmap.

除此之外,Bitmap还提供了一些静态方法用于创建Bitmap对象,如下所示:

createBitmap(Bitmap source,int x,int y,int width,int height)

从源位图source的指定坐标点开始,从中“挖取”宽width,高height的一块出来,

用于创建新的Bitmap对象

createScaledBitmap(Bitmap src,int dstwidth,int dstHeight,boolean filter) 对源位图src进行缩放,缩放成dstWidth,dstHeight的新位图
createBitmap(int width,int height,Bitmap.Config config) 创建一个宽width,高height的新位图 
createBitmap(Bitmap source,int x,int y, int width,int height,Matrix m,boolean filter)

从源位图source指定的坐标点开始,从中“挖取”宽width,高height的一块出来,

创建新的Bitmap对象。并按Matrix指定的规则进行变换。

--

BitmapFactory是一个工具类,其用于提供大量的方法,这些方法可用于从不同的数据源来解析、创建Bitmap对象。

BitmapFactory包含的方法如下:

decodeByteArray(byte[] data,int offset,int lenght) 从指定字节数的offset位置开始,将长度为length的字节数据解析成Bitmap对象
decodeFile(String filePathName) 从filePathName指定的文件中解析、创建Bitmap对象
decodeFileDescriptor(fileDescriptor fd) 用于从FileDescriptor对应的文件中解析、创建Bitmap对象
decodeResource(Resource res,int id) 用于根据给定的资源ID从指定资源中解析、创建Bitmap对象
decodeStream(InputStream is) 用于从指定输出流中解析、创建Bitmap对象

实例如下:实现点击按钮后切换图像显示

布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <Button
android:id="@+id/btnTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test" /> <ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </LinearLayout> 代码实现==》
package com.example.mybitmap1; import java.io.IOException;
import java.io.InputStream; import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetManager;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView; public class MainActivity extends Activity
{
String[] Images = null;
AssetManager Assets = null;
Integer CurrentImg = 0;
ImageView Img; @Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); final Button butTest = (Button) this.findViewById(R.id.btnTest);
Img = (ImageView) this.findViewById(R.id.image); try
{
Assets = getAssets();
// 获取/assets/目录下所有文件
Images = Assets.list("");
Log.i("swg", "Images length===" + Images.length);
} catch (IOException e)
{
e.printStackTrace();
} butTest.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (CurrentImg >= Images.length)
CurrentImg = 0;
// 查找指定类型的图片文件
while (!Images[CurrentImg].endsWith(".ico") && !Images[CurrentImg].endsWith(".png")
&& !Images[CurrentImg].endsWith(".jpg")
&& !Images[CurrentImg].endsWith(".gif"))
{
CurrentImg++;
if (CurrentImg >= Images.length)
CurrentImg = 0;
} InputStream stream = null;
try
{
stream = Assets.open(Images[CurrentImg++]);
} catch (IOException e)
{
e.printStackTrace();
} BitmapDrawable bit = (BitmapDrawable) Img.getDrawable();
// 如果图片还未回收,先强制收回改图片
if (bit != null && !bit.getBitmap().isRecycled())
{
bit.getBitmap().recycle();
} Img.setImageBitmap(BitmapFactory.decodeStream(stream));
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

android学习笔记41——图形图像处理1的更多相关文章

  1. android学习笔记43——图形图像处理3——Path

    Path类 Path类可以预先在View上将N个点连成一条“路径”,然后调用Canavas的drawPath(path,paint)即可沿着路径绘制图形. android还为路径绘制提供了PathEf ...

  2. android学习笔记42——图形图像处理2——绘图

    绘图 android的绘图应该继承View组件,并重写onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Can ...

  3. Android学习笔记进阶18 之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  4. Android学习笔记进阶18之画图并保存图片到本地

    1.首先创建一个Bitmap图片,并指定大小:   2.在该图片上创建一个新的画布Canvas,然后在画布上绘制,并保存即可:   3.需要保存的目录File,注意如果写的目录如“/sdcard/so ...

  5. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  6. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

  7. android学习笔记36——使用原始XML文件

    XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...

  8. Android学习笔记之JSON数据解析

    转载:Android学习笔记44:JSON数据解析 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种 ...

  9. udacity android 学习笔记: lesson 4 part b

    udacity android 学习笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

随机推荐

  1. Python的类实例属性访问规则

    一般来说,在Python中,类实例属性的访问规则算是比较直观的. 但是,仍然存在一些不是很直观的地方,特别是对C++和Java程序员来说,更是如此. 在这里,我们需要明白以下几个地方: 1.Pytho ...

  2. MyEclipse+Struts+Hibernate+Mysql开发环境配置

    软件: jdk-6u22-windows-x64.exe apache-tomcat-6.0.29.exe mysql-5.1.51-winx64.exe myeclipse-8.6.0-win32. ...

  3. 使用 Spring Security 保护 Web 应用的安全

    安全一直是 Web 应用开发中非常重要的一个方面.从安全的角度来说,需要考虑用户认证和授权两个方面.为 Web 应用增加安全方面的能力并非一件简单的事情,需要考虑不同的认证和授权机制.Spring S ...

  4. ZOJ 1056 The Worm Turns

    原题链接 题目大意:贪吃蛇的简化版,给出一串操作命令,求蛇的最终状态是死是活. 解法:这条蛇一共20格的长度,所以用一个20个元素的队列表示,队列的每个元素是平面的坐标.每读入一条指令,判断其是否越界 ...

  5. 作业 for liao

    AD620 芯片 93 dB min Common-Mode Rejection Ratio (G = 10) 0.28 mV p-p Noise (0.1 Hz to 10 Hz) THEORY O ...

  6. php部分---对数据的多条件查询,批量删除

    1.给多条件查询,添加条件 <h1>新闻信息查看</h1> <?php $tiaojian1=" 1=1"; $tiaojian2=" 1= ...

  7. squid代理服务器搭建及配置

    系统环境:CentOS release 6.5 (Final)(最小化安装) 一.安装squid # yum -y install squid 二.编辑配置文件(正向代理) # vim /etc/sq ...

  8. CURL学习和应用

    使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并把 ...

  9. MySql的FIND_IN_SET()查询函数的使用

    表 table的结构如下: id title 1 12,21 2 21,32 3 45,21,78 4 221,45,74 5 34,421,121 6 52,21,321 现在用sql语句查出来字段 ...

  10. 转贴:sudo apt-get install 可以安装的一些软件

    Ubuntu 下的一些软件安装sudo apt-get install virtualbox#华主席推荐 2007年年度最佳软件,最佳编辑选择奖得主.....sudo apt-get install ...