您的位置:首页 > 编程语言 > PHP开发

Bitmap中的getPixels方法的小小应用

2013-08-27 23:28 218 查看
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的矩形透明填充区域):



 

操作完成时的图片:



 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Bitmap