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 ...
随机推荐
- ASP.NET MVC4中调用WEB API的四个方法
http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各 ...
- hdu 1049 Climbing Worm
解题思路: 1. 两种情况,0x1:井深度小于一次跳的高度.0x2:井深度大于一次跳的高度 2.如果 属于 0x1 则一次跳出 3.否则 本次解题中直接枚举跳的次数 一直循环,直到 [每次跳的真实高度 ...
- CrtCtl (客户端认证的证书、私钥)的控制
crt (证书文件) 编辑 本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 客户端认证的证书.私钥. 中文名 crt 性 质 证书文件 类 型 客户端认证的证书. ...
- 我的css释疑-float line-height inline-block vertical-align
markdown的图片和链接格式相类似: [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号! 当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 ...
- wes开发笔记
html中的button和submit有什么不同? submit是提交表单用,而button是执行javascript用,两者各有用处. 用到自己写按钮的时候,都是用button,submit很少写 ...
- winscp私钥如何生成
问题1,我用SecureCRT 5.0的自带工具生成了密钥和公钥(分别是不带后缀名的密钥文件和.pub的公钥文件),传上服务器也可以正常使用. 但是我用其它一些客户端工具连接时需要的密钥文件是 ...
- javascript正则——贪婪匹配
熟悉正则的朋友都知道,正则的匹配有“贪婪”和“非贪婪”之分. “贪婪”匹配是尽可能多的匹配: 对于字符串‘aaaa’, /a+/匹配整个字符串,而非贪婪匹配/a+?/匹配的是整个字符串的第一个‘a’, ...
- Java EE学习--Quartz基本用法
新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结 ...
- Borg Maze(MST & bfs)
Borg Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9220 Accepted: 3087 Descrip ...
- quick-cocos2d-x学习笔记—定时器
定时器用的地方还是比较多的,游戏中的逻辑判断很多都是采用每帧执行.quick对于schedule的封装在scheduler这个lua文件中.如果是第一次接触quick的话,可能按照官方的api来写一个 ...