Bitmap中的getPixels方法的小小应用
2013-08-27 23:28
218 查看
1.利用像素操作,实现使用以鼠标坐标为(left,top)的指定大小的矩形区域,对Bitmap进行填充透明色,来实现“撕开美女衣服”的游戏(当然这是一部分代码而已)
操作效果:
原始的图片:
当移动鼠标时的图片(此时鼠标选择了(350,350的点,任意选择一点,就会以它为矩形的左上顶点,形成一个长为100,宽为40的矩形透明填充区域):
操作完成时的图片:
package com.example.bitmap; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.view.MotionEvent; import android.view.View; public class BitmapTest extends View implements Runnable { private Bitmap mBitmap, mBitmap01; private Matrix matrix = new Matrix(); private int[] pixels; private int bitmapWidth; private int bitmapHight; int x1,y1; public BitmapTest(Context context) { super(context); // TODO Auto-generated constructor stub mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.b); mBitmap01 = ((BitmapDrawable) getResources().getDrawable(R.drawable.a)) .getBitmap(); bitmapWidth = mBitmap01.getWidth(); bitmapHight = mBitmap01.getHeight(); pixels = new int[bitmapWidth * bitmapHight]; mBitmap01.getPixels(pixels, 0, bitmapWidth, 0, 0, bitmapWidth, bitmapHight); new Thread(this).start(); } public void init() { } public boolean onTouchEvent(MotionEvent event){ int action=event.getAction(); switch(action){ case MotionEvent.ACTION_MOVE: x1=(int) event.getX(); y1=(int) event.getY(); break; } return true; } public void onDraw(Canvas canvas) { // canvas.drawBitmap(mBitmap, 0,0 , null); // Bitmap mBitmap02=mBitmap.createBitmap(mBitmap, 0, 0, 100, 100); // canvas.drawBitmap(mBitmap02,0,mBitmap.getHeight(),null); /* * 图像操作测试 */ // Paint p=new Paint(); // p.setColor(Color.RED); // canvas.drawLine(100.0f, 100.0f, 100.0f, 400.0f, p); // canvas.drawLine(100.0f, 100.0f, 400.0f, 100.0f, p); // matrix.reset(); // matrix.setRotate(30); // matrix.setRotate(0); // matrix.postScale(0.5f, 0.5f); // matrix.postTranslate(100, 100); // matrix.postSkew(1f, 0.5f, 100, 100); // canvas.drawBitmap(mBitmap, matrix, null); // 像素操作测试 // canvas.drawColor(Color.TRANSPARENT); super.onDraw(canvas); canvas.drawBitmap(mBitmap, 0, 0, null); int x = y1; int y = x1; try { for (int i = x; i < x + 100; i++) { for (int j = y; j < y + 40; j++) { pixels[i * bitmapWidth + j] = Color.TRANSPARENT; /*其中i值表示的是矩形区域所在的Y轴坐标,j值表示的是偏移量,eg.例如,鼠标移动到(100,100)的地方,就回形成一个(100,100,100,40)的矩形区域,这是因为鼠标在(100,100)的时候表示的像素点就是,pixels[100*bitmapWidth+100],因为对于整个Bitmap来说,100*bitmapWidth能够表示(100,100)上面区域的最后一个像素,然后加上j,即加上(100,100)所在行的左边的距离,最终表示(100,100)的像素,如果对i的大小,j的大小进行限制,既可以围成一个矩形了。*/ } } } catch (Exception e) { e.printStackTrace(); } canvas.drawBitmap(pixels, 0, bitmapWidth, 0, 0, bitmapWidth, bitmapHight, true, null); } @Override public void run() { // TODO Auto-generated method stub while (!Thread.currentThread().isInterrupted()) { try { } catch (Exception e) { e.printStackTrace(); } postInvalidate(); } } }
操作效果:
原始的图片:
当移动鼠标时的图片(此时鼠标选择了(350,350的点,任意选择一点,就会以它为矩形的左上顶点,形成一个长为100,宽为40的矩形透明填充区域):
操作完成时的图片:
相关文章推荐
- android运用Bitmap时OOM的解决方法之一软应用(SoftReference)
- FinalBitmap在部分手机上listview中加载图片时界面闪退重启应用的问题解决方法
- Android应用开发SharedPreferences存储数据的使用方法
- map应用之insert方法
- Android_完美退出应用方法
- android应用中去掉标题栏的方法
- 正交表方法在创建测试套件上的应用(2)
- Google Map Api 的简单应用之方法属性
- Android编程实现应用自动更新、下载、安装的方法
- js中apply和call方法的应用
- Tomcat建立多个应用(Web Server),多个主机,多个站点的方法
- Context3D类中的drawToBitmapData方法(将GPU缓冲区数据写到位图中)
- 关于@Override toString()方法的应用
- iOS应用开发中使UITextField实现placeholder属性的方法
- -jar参数运行应用时classpath的设置方法
- 五、Sketchup用ruby进行二次开发--创建图形(面及pushpull、followMe方法的应用)
- 数组的添加push()方法和删除splice() 方法 的 应用
- Android应用使用Multidex突破64K方法数限制
- Tomcat部署Web应用方法总结
- Sping+Struts+Hibernate开发的应用部署在weblogic下时出现的“ClassNotFoundException: org.hibernate.hql.ast.HqlToken”错误的解决方法