上一篇已经介绍了Android种Bitmap和Canvas的使用,以下我们来写一个详细实例

http://blog.csdn.net/zhaoyazhi2129/article/details/32136179

执行效果:

主要代码

package com.example.guaguale;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
import android.view.View; public class CanvaDemoActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(new CustomView(this)); } /**
* 使用内部类 自己定义一个简单的View
*
* @author zhaoyazhi
*
* 2014-6-18
*/
class CustomView extends View { public CustomView(Context context) {
super(context); } // 在这里我们将測试canvas提供的绘制图形方法
@Override
protected void onDraw(Canvas canvas) {
drawBitmap(canvas);
drawBitmapPostScale(canvas);
drapBitmapPostRotate(canvas);
shuiyinBitmap(canvas);
} /**
* 在canvas放置图片
*
* @param canvas
*/
private void drawBitmap(Canvas canvas) {
// 获取图片资源
Bitmap bmp = BitmapFactory.decodeResource(getResources(),
R.drawable.e);
// 将图片加入到canvas
canvas.drawBitmap(bmp, 0, 0, null);
} /**
* 缩放图片
*
* @param canvas
*/
private void drawBitmapPostScale(Canvas canvas) {
// 获取图片资源
Bitmap bmp1 = BitmapFactory.decodeResource(getResources(),
R.drawable.e);
// Matrix类进行图片处理(缩小或者旋转)
Matrix matrix = new Matrix();
// 缩小一倍
matrix.postScale(0.5f, 0.5f);
// 生成新的图片
Bitmap dstbmp = Bitmap.createBitmap(bmp1, 0, 0, bmp1.getWidth(),
bmp1.getHeight(), matrix, true);
// 加入到canvas
canvas.drawBitmap(dstbmp, 200, 0, null);
} /**
* 旋转图片
*
* @param canvas
*/
private void drapBitmapPostRotate(Canvas canvas) {
// 获取图片资源
Bitmap bmp2 = BitmapFactory.decodeResource(getResources(),
R.drawable.e);
// Matrix类进行图片处理(缩小或者旋转)
Matrix matrix1 = new Matrix();
// 缩小
matrix1.postScale(0.8f, 0.8f);
// 旋转
matrix1.postRotate(45);
// 生成新的图片
Bitmap dstbmp1 = Bitmap.createBitmap(bmp2, 0, 0, bmp2.getWidth(),
bmp2.getHeight(), matrix1, true);
// 加入到canvas
canvas.drawBitmap(dstbmp1, 130, 100, null);
} /**
* 加水印图片
*
* @param canvas
*/
private void shuiyinBitmap(Canvas canvas) {
Bitmap bmp = createBitmap(
BitmapFactory.decodeResource(getResources(), R.drawable.e),
BitmapFactory.decodeResource(getResources(), R.drawable.c));
canvas.drawBitmap(bmp, 10, 200, null);
} // 图片加入水印处理
private Bitmap createBitmap(Bitmap src, Bitmap watermark) {
String tag = "createBitmap";
Log.d(tag, "create a new bitmap");
if (src == null) {
return null;
} int w = src.getWidth();
int h = src.getHeight();
int ww = watermark.getWidth();
int wh = watermark.getHeight();
// create the new blank bitmap
Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
Canvas cv = new Canvas(newb);
// draw src into
cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标開始画入src
// draw watermark into
cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, null);// 在src的右下角画入水印
// save all clip
cv.save(Canvas.ALL_SAVE_FLAG);// 保存
// store
cv.restore();// 存储
return newb;
}
} }

代码中都有详细实例,大家自己看哦,有什么不清楚的能解答都帮大家解答

赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印的更多相关文章

  1. 赵雅智_使用SQLiteDatabase操作SQLite数据库及事务

    知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ...

  2. 赵雅智:android教学大纲

    带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...

  3. 赵雅智_Android编码规范

    凝视 导入mycodetemplates.xml统一凝视样式 须要加凝视的地方 类凝视(必加) 方法凝视(必加) 块凝视主要是数据结构和算法的描写叙述(必加) 类成员变量和常量凝视(选择性加入) 单行 ...

  4. 赵雅智_Android案例_刮刮乐

    实现效果 主要代码 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  5. 赵雅智_Swift(4)_断言

    可选能够让你推断值是否存在.你能够在代码中优雅地处理值缺失的情况.然而,在某些情况下,假设值缺失或者值并不满足特定的条件.你的代码可能并不须要继续执行.这时.你能够在你的代码中触发一个断言(asser ...

  6. 赵雅智_Android的getResources()资源引用

    今天做一个Android的刮刮乐项目.里面用到非常多的地方用到了getResources. <span style="font-size:12px;"> // 获得图片 ...

  7. 赵雅智_Swift(1)_swift简单介绍及类型

    Swift 是 iOS 和 OS X 应用开发的一门新语言. 假设你有 C 或者 Objective-C 开发经验, Swift 的非常多内容都是你熟悉的. Swift 的类型是在 C 和 Objec ...

  8. 赵雅智_android_frame动画

    在開始实例解说之前,先引用官方文档中的一段话: Frame动画是一系列图片依照一定的顺序展示的过程,和放电影的机制非常相似.我们称为逐帧动画.Frame动画能够被定义在XML文件里,也能够全然编码实现 ...

  9. 赵雅智_ContentProvider

    ContentProvider介绍 ContentProvider是不同应用程序之间进行交换数据的标志API 也就是说:一个应用程序通过ContentProvider暴露自己的数据操作接口,那么无论该 ...

随机推荐

  1. ActiveMQ学习笔记(19)----Consumer高级特性(一)

    1. Exclusive Consumer 独有消费者:Queue中的消息是按照顺序被分发到consumer的,然而,当你有多个consumers同时从相同的queue中提取消息时,你将失去这个保证. ...

  2. 详解JavaScript中的原型和继承-转自颜海镜大大

    本文将会介绍面向对象,继承,原型等相关知识,涉及的知识点如下: 面向对象与继承 CEOC OLOO 臃肿的对象 原型与原型链 修改原型的方式 面向对象与继承 最近学习了下python,还写了篇博文&l ...

  3. json对象获取长度以及字符串和json对象的转换

    var arr = Object.keys(typeARR); var str = ''; var len = arr.length; for(var i = 0;i<len;i++){ str ...

  4. [六省联考2017]分手是祝愿(期望+DP)

    题解 很容易想出来最优策略是什么. 就是从n到1看到开着的灯就把它关了 我们预处理出当前状态把灯全部关闭后的最少步数cnt 然后我们的主人公就要瞎按... 设dp[i]代表当前状态最优解为i步时走到d ...

  5. redis搭建与安装2

    第一步redis安装:1.首先确认下载包为64位的还是32位的2.下载http://code.google.com/p/servicestack/downloads3.解压下载包得到以下文件:cygw ...

  6. /etc/rsyncd.conf

    [root@backup ~]# cat /etc/rsyncd.conf #Rsync server#created by oldboy ##rsyncd.conf start##uid = rsy ...

  7. Generator 简介

    Generator 就是一种状态机,封装多个内部状态. 执行 Generator 函数会返回一个遍历器对象(),也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对 ...

  8. java 自定义实现base64编码转换

    1.base64编码转换 所谓base64编码,即按照规则把字符转化为"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456 ...

  9. hdu3468 Treasure Hunting 二分匹配

    //给一个n*m的图 //.表示空白地 //*表示有黄金 //#表示墙 //一个人须要依照A...Z..a..z的顺序以最短路径走到下一个 //每次仅仅能在他的路线上经过的地方取一块黄金 //问最多能 ...

  10. IOS音频架构之Audio Unit

    在前面的章节部分我们已经对IOS音频结构有了一个清晰的认识,知道Audio Unit是位于整个音频结构的最底层,这一层非常多API已经開始和硬件打交道了.所以比較复杂,有了前面的基础再来看这个部分就比 ...