Android下利用Bitmap切割图片
在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了。
下面是程序的关键代码:
在MyView(继承于View)类中的重写的onDraw(Canvas canvas)方法中,有如下代码段:
Bitmap resource = BitmapFactory.decodeResource(this.getResources(), R.drawable.num);
Bitmap zero = Bitmap.createBitmap(resource, 0, 0, 12, 12);
Bitmap one = Bitmap.createBitmap(resource, 12, 0, 12, 12);
Bitmap two = Bitmap.createBitmap(resource, 24, 0, 12, 12);
Bitmap three = Bitmap.createBitmap(resource, 36, 0, 12, 12);
Bitmap four = Bitmap.createBitmap(resource, 48, 0, 12, 12);
Bitmap five = Bitmap.createBitmap(resource, 60, 0, 12, 12);
Bitmap six = Bitmap.createBitmap(resource, 72, 0, 12, 12);
Bitmap seven = Bitmap.createBitmap(resource, 84, 0, 12, 12);
Bitmap eight = Bitmap.createBitmap(resource, 96, 0, 12, 12);
Bitmap nine = Bitmap.createBitmap(resource, 108, 0, 12, 12);
其中R.drawable.num为数字图片,每个数字占据的像素为12*12,Bitmap.createBitmap方法中的五个参数意义分别为:需要切割的图片资源、切割起始点的X坐标、切割起始点的Y坐标、切割多宽、切割多高。
切割下来之后就非常简单的就可以显示各种数字了,例如:用String类型的number表示需要显示的数字,则
char nums[] = number.toCharArray();
for(int i = 0; i < nums.length; i ++) {
if(nums[i] == '0') {
canvas.drawBitmap(zero, i * 12, 0, mPaint);
} else if(nums[i] == '1') {
canvas.drawBitmap(one, i * 12, 0, mPaint);
} else if(nums[i] == '2') {
canvas.drawBitmap(two, i * 12, 0, mPaint);
} else if(nums[i] == '3') {
canvas.drawBitmap(three, i * 12, 0, mPaint);
} else if(nums[i] == '4') {
canvas.drawBitmap(four, i * 12, 0, mPaint);
} else if(nums[i] == '5') {
canvas.drawBitmap(five, i * 12, 0, mPaint);
} else if(nums[i] == '6') {
canvas.drawBitmap(six, i * 12, 0, mPaint);
} else if(nums[i] == '7') {
canvas.drawBitmap(seven, i * 12, 0, mPaint);
} else if(nums[i] == '8') {
canvas.drawBitmap(eight, i * 12, 0, mPaint);
} else if(nums[i] == '9') {
canvas.drawBitmap(nine, i * 12, 0, mPaint);
}
}
其中canvas为画布,drawBitmap方法中的四个参数的意义分别为:需要绘制的图片资源、在画布上绘制的起始点的X坐标、Y坐标、画笔。其中画笔在此处可以不进行任何设置,只需new一个出来即可,Paint mPaint = new Paint();
完整代码
NumView
package com.barney;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.view.View;
public class NumView extends View {
private static Paint mPaint;
private String num;
public NumView(Context context, String num) {
super(context);
this.num = num;
mPaint = new Paint();
}
@Override
public void draw(Canvas canvas) {
super.onDraw(canvas);
int base = 0;
mPaint.setAntiAlias(true);
DisplayMetrics dm = new DisplayMetrics();
dm = getResources().getDisplayMetrics();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDensity = dm.densityDpi;
Bitmap resource = BitmapFactory.decodeResource(this.getResources(), R.drawable.num, options);
Bitmap zero = Bitmap.createBitmap(resource, 0, 0, 12, 12);
Bitmap one = Bitmap.createBitmap(resource, 12, 0, 12, 12);
Bitmap two = Bitmap.createBitmap(resource, 24, 0, 12, 12);
Bitmap three = Bitmap.createBitmap(resource, 36, 0, 12, 12);
Bitmap four = Bitmap.createBitmap(resource, 48, 0, 12, 12);
Bitmap five = Bitmap.createBitmap(resource, 60, 0, 12, 12);
Bitmap six = Bitmap.createBitmap(resource, 72, 0, 12, 12);
Bitmap seven = Bitmap.createBitmap(resource, 84, 0, 12, 12);
Bitmap eight = Bitmap.createBitmap(resource, 96, 0, 12, 12);
Bitmap nine = Bitmap.createBitmap(resource, 108, 0, 12, 12);
char nums[] = num.toCharArray();
for(int i = 0; i < nums.length; i ++) {
Rect rect = new Rect();
rect.set(base + i * 12, 0, base + i * 12 + 12, 12);
Bitmap bitmap = null;
if(nums[i] == '0') {
bitmap = zero;
} else if(nums[i] == '1') {
bitmap = one;
} else if(nums[i] == '2') {
bitmap = two;
} else if(nums[i] == '3') {
bitmap = three;
} else if(nums[i] == '4') {
bitmap = four;
} else if(nums[i] == '5') {
bitmap = five;
} else if(nums[i] == '6') {
bitmap = six;
} else if(nums[i] == '7') {
bitmap = seven;
} else if(nums[i] == '8') {
bitmap = eight;
} else if(nums[i] == '9') {
bitmap = nine;
}
canvas.drawBitmap(bitmap,null, rect, mPaint);
}
}
}
BitmapDemoActivity
package com.barney;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
public class BitmapDemoActivity extends Activity {
private EditText myEditText;
private Button myButton;
private LinearLayout myLinearLayout;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myButton = (Button) this.findViewById(R.id.myButton);
myEditText = (EditText) this.findViewById(R.id.myEditText);
myLinearLayout = (LinearLayout) this.findViewById(R.id.myLinearLayout);
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String num = myEditText.getText().toString();
NumView numView = new NumView(BitmapDemoActivity.this, num);
myLinearLayout.removeAllViews();
myLinearLayout.addView(numView);
}
});
}
}
源代码
参考链接
Android下利用Bitmap切割图片 - - ITeye技术网站
效果如下
Android下利用Bitmap切割图片的更多相关文章
- android 下 利用webview实现浏览器功能
android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...
- 浅谈Android下的Bitmap之大Bitmap加载
引言 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用.Android程序的性能和内存问题,大部分都和图片紧密相关,而图片的加载在很多情况下很用 ...
- Android下利用zbar类库实现扫一扫
程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zbardemo.zip Android下常用的条码扫描类库有zxing和zbar,比较了一下 ...
- Android下利用SQLite数据库实现增删改查
1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3: sqlite3 数据库 4 接下来就可以进行数据库的sql语法 ...
- Android下利用zxing类库实现扫一扫
程序源代码及可执行文件下载地址:http://files.cnblogs.com/rainboy2010/zxingdemo.zip zxing,一款无比强大的条码解析类库,下面讲解一下如何利用zxi ...
- Android下利用RadioGroup和RadioButton实现Tabbar的效果
本实现方法主要使用RadioGroup和RadioButton的组合方式来实现Tabbar的效果. 其中选中的Tab的切换的动作可以通过RadioGroup的OnCheckedChangeListen ...
- Android 调用jepg库进行图片压缩,保持图片不失真
1. 浅谈为什么Android和iOS图片质量差距那么大? 首先来说,作为一个安卓狗,机器当然用的是安卓的手机.现在的安卓手机大多数都会以高清拍照,动不动就几千万柔光相机来吸引各种买家.买来后,拍照发 ...
- Android调用相册拍照控件实现系统控件缩放切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家 package cn.m15.test; import java.io.By ...
- Android 调用相册 拍照 实现系统控件缩放 切割图片
android 下如果做处理图片的软件 可以调用系统的控件 实现缩放切割图片 非常好的效果 今天写了一个demo分享给大家. package cn.m15.test; import java.io.B ...
随机推荐
- App接口中json方式封装通信接口
封装json通信接口的类 <?php class Response{ /** * 按json方式输出通信数据 * @param integer $code状态码 * @param string ...
- IIS短文件名泄露漏洞危害及防范方法
危害级别:轻微 IIS短文件名泄露漏洞 WASC Threat Classification 描述: Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件 ...
- SqlServer 连接字符串多种配置
Application Name(应用程序名称):应用程序的名称.如果没有被指定的话,它的值为.NET SqlClient Data Provider(数据提供程序). AttachDBFilenam ...
- swift中文文档- 类型转换
未翻译完 待续(英语烂,求斧正) Type Casting 类型转换 Type casting is a way to check the type of an instance, and/or to ...
- 5个常用Java代码混淆器 助你保护你的代码
[IT168 技术文档] 从事Java编程的人都知道,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD.因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以使用 ...
- [整理]Web应用安全学习
最近在复习TCP/IP相关知识,同时也想对网络安全相关的知识进行系统的补漏. 阅读了一些常见的关于XSS.CSRF等的一些网上文章: http://www.cnblogs.com/luminji/ca ...
- [Effective JavaScript 笔记]第41条:将原型视为实现细节
对象原型链 一个对象给其使用者提供了轻量.简单.强大的操作集.使用者与一个对象最基本的交互是获取其属性值和调用其方法.这些操作不是特别在意属性存储在原型继承结构的哪个位置.随着时间推移,实现对象时可能 ...
- ssh和mvc理论基础
ssh中mvc到底指的什么 mvcsshhibernatespringstrutsioc在SSH整合的架构中,Spring充当了一个容器的作用,Spring使用IOC和AOP技术接管了Hibernat ...
- [BZOJ1061][Noi2008]志愿者招募
[BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...
- SQL注入--宽字节注入
PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...