赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印

上一篇已经介绍了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实现图片显示,缩小,旋转,水印,布布扣,bubuko.com

时间: 2024-10-14 01:47:39

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

赵雅智_使用SQLiteDatabase提供的增删改查方法及事务

知识点详解:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDao.java,UserDao.java同上篇 http://blog.csdn.net/zhaoyazhi2129/article/details/28640195 UserDaoImple.java package com.example.android_sqlite.dao.impl; impor

赵雅智_通过fragment对布局进行改变

项目需求 设置两个片段,昨天片段对右边进行颜色更改,片段替换的操作 实现效果 点击片段1:改变片段1的颜色值 点击片段2替换片段1 实现步骤 新建主activity并在布局添加两个片段 左片段 对片段1进行颜色值改变的点击事件 获取FragmentManager对象,只要获取FragmentManager对象就能获取fragment对象 根据FragmentManager对象的findFragmentById方法来获取指定的fragment 获取Fragment中的布局文件 获取view中任何控

赵雅智_使用sqlite创建数据库

DatabaseHelper.java package com.example.android_sqlite.database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelp

赵雅智_名片夹(2)_自动登录

功能介绍:刚安装应用的时候进行登录,当用户开启自动登录的时候,进入程序自动进入主界面 LoginAct.java package com.cards.activity; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import com.c

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

知识点详解:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 具体代码: MainActivity.java package com.example.android_sqlite; import android.app.Activity; import android.os.Bundle; import com.example.android_sqlite.dao.impl.UserDaoImpls; import com.ex

赵雅智_名片夹(6)_仿微信底导航栏

效果图如下 使用TabHost布局,并使用单选按钮组和FrameLayout相结合 布局文件代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_

赵雅智_Android案例_刮刮乐

实现效果 主要代码 <FrameLayout 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" > <I

赵雅智_android实例_当监听类有数据更新时下拉刷新

之前两篇文章分别介绍了OnScrollListener的实现和ContentProvider监听数据的变化,下面我们就结合者两个知识点实现一个小项目 项目需求 使用当ContentProvider监听类有数据更新时,在当前界面进行提示,并用OnScrollListener实现下拉刷新 实现效果 通过ContentProvider显示数据在界面 当监听类发生变化时 下拉刷新后显示数据 实现步骤 android_sqlite项目 定义操作标识 匹配结果码 继承ContentProvider类重写方法

赵雅智_Android_Canvas

Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0. android.graphics和android.graphics.drawable包 大部分2D使用的api都在android.graphics和android.graphics.drawable包中. 他们提供了图形处理相关的: Canvas.ColorFilter.Point(点)和RetcF(矩形)等 还有一些动画相关的:AnimationDrawable. Bit