【Android开发】图形图像处理技术-Bitmap和BitmapFactory类

简介:
一、Bitmap类
Bitmap类代表位图,是Android系统中图像处理的一个重要类。使用该类,不仅可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,而且还可以指定格式保存图像文件。对于这些操作,都可以通过Bitmap类提供的方法来实现。Bitmap类提供的常用方法如表所示:

(1)public final int getHeight():获取位图宽度
(2)public final int getWidth():获取位图高度
(3)public static Bitmap createBitmap(Bitmap src):通过位图资源创建位图实例
(4)public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height):在指定位置创建位图,可放大缩小位图  source是位图资源,(x,y)表示位图左上角坐标,width表示位图宽度,height表示位图高度
(5)public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter):截取位图中指定区域中的位图  source是目标位图资源,(x,y)表示剪切位图左上角起始点坐标,width表示目标位图宽度,height表示目标位图高度,m表示选择区域,filter是当其为true且m表示的区域大于前面参数所描述的区域时就填充截取的位图空白处
(6)public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream):保存图像文件  format是图片保存格式,quality是图片压缩的质量取值在0-100之间 0表示压缩的最小尺寸 100表示压缩的最好质量,stream是图片的输出流
注:对于PNG格式的图片是有损压缩的,quality压缩图片是没有效果的,该参数的设置无影响
(7)creatScaleBitmap(Bitmap source, int x, int y, int width, int height, boolean filter)
用于将源位图缩放为指定宽度和高度的新的Bitmap对象
(8)isRecycled()用于判断Bitmap对象是否被回收
(9)recycle()强制回收Bitmap对象


例如,创建一个包括4个像素(每个像素对应一种颜色)的Bitmap对象的代码如下:
Bitmap bitmap=Bitmap.creatBitmap(new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.MAGENTA},
4,1,Config.RGB_565);

Bitmap小测试:
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/tableLayout1"
    android:orientation="vertical"
    >
 	<com.example.test.DrawView
 	    android:id="@+id/drawView1"
 	    android:layout_width="wrap_content"
 	    android:layout_height="wrap_content"/>
</LinearLayout>

DrawView.java:
package com.example.test;


import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;


public class DrawView extends View{
	/*
	 * 功能:构造方法
	 * */
	public DrawView(Context context, AttributeSet attrs) {
		super(context, attrs);
		
	}
	
	/*
	 * 功能:重写onDraw方法
	 * */
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		Paint paint=new Paint();
		paint.setColor(Color.BLACK);
		paint.setStrokeWidth(2);
		paint.setStyle(Style.STROKE);
		Bitmap bitmap=Bitmap.createBitmap(40,60,Config.RGB_565);
		canvas.drawBitmap(bitmap, 150, 150,paint);
	}
}

运行效果如图所示



二、BitmapFactory类
在Android中,还提供了一个Bitmap类,该类作为一个工具类,用于从不同的数据源来解析、创建Bitmap对象。BitmapFactory类提供的创建Bitmap对象的常用方法如表所示:
(1)decodeFile(String pathName)用于从给定的路径所指定的文件中解析、创建Bitmap对象
(2)decodeFileDescriptor(FileDescriptor fd)用于从FileDescriptor对应的文件中解析、创建Bitmap对象
(3)decodeResource(Resource res,int id)用于根据给定的资源id,从指定的资源中解析、创建Bitmap对象
(4)decodeStream(InputStream is)用于从指定的输入流中解析、创建Bitmap对象

例如,要解析SD卡上的图片文件img01.jpg并创建对应的Bitmap对象,可以使用下面的代码:
String path="/sdcard/pictrues/bccd/img01.jpg";
Bitmap bm=BitmapFactory.decodeFile(path);

要解析Drawable资源中保存的图片文件img02.jpg并创建对应的Bitmap对象,可以使用下面的代码:
Bitmap bm=BitmapFactory.decodeResoutce(MainActivity.this,R.drawable.img02.jpg);

这一点在之前写的"移动的小兔子"的实例中用到过。

转载请注明出处:http://blog.csdn.net/acmman/article/details/45177209

相关文章
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
318 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
290 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
666 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
553 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
180 0
|
3月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
246 6
|
5月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
233 0
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
624 1
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
260 5
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。

热门文章

最新文章