Bitmap中的getPixels方法的小小应用

1.利用像素操作,实现使用以鼠标坐标为(left,top)的指定大小的矩形区域,对Bitmap进行填充透明色,来实现“撕开美女衣服”的游戏(当然这是一部分代码而已)

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的矩形透明填充区域):

 

操作完成时的图片:


 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值