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

操作完成时的图片:

Bitmap中的getPixels方法的小小应用相关推荐

  1. Bitmap类getPixels()方法中参数stride理解

    转载自:http://blog.csdn.net/jie_qing/article/details/7259520 在学习Graphics中遇到位图(Bitmap)中getPixels()方法,对该方 ...

  2. 通过getPixel();和通过bmp.getPixels();方法遍历整张图片的效率比较。

    如果要遍历一张图片的所有像素的(比如二值化),可以用两个 for 循环嵌套通过Bitmap中的getPixel(x,y)方法获取对应点的像素值即可.还有一种方法是通过Bitmap中的getPixels ...

  3. html中获取modelandview中的json数据_从Bitmap中获取YUV数据的两种方式

    从Bitmap中我们能获取到的是RGB颜色分量,当需要获取YUV数据的时候,则需要先提取R,G,B分量的值,然后将RGB转化为YUV(根据具体的YUV的排列格式做相应的Y,U,V分量的排列) 所以这篇 ...

  4. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )

    文章目录 一. 图片质量压缩方法 二. 查找对应的 Native 方法源码 三. 分析 Bitmap.cpp 中动态注册 Native 方法 在博客 [Android 内存优化]图片文件压缩 ( An ...

  5. android bitmap着色,android开发 替换bitmap中的颜色值

    /** * 将bitmap中的某种颜色值替换成新的颜色 * @param bitmap * @param oldColor * @param newColor * @return */ public ...

  6. android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解

    本文实例讲述了Android数据持久化之读写SD卡中内容的方法.分享给大家供大家参考,具体如下: 前面文章里讲的那三个方法:openFileOutput.openFileInput虽然都能通过流对象O ...

  7. python new方法_Python中的__new__()方法的使用

    __new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known case ...

  8. Unity中的截图方法(包括全屏截图、区域截图、Camera截图和摄像头截图)

    Unity中的截图方法(包括全屏截图.区域截图.Camera截图和摄像头截图) Application.CaptureScreenshot ScreenCapture Texture2D.ReadPi ...

  9. vue打印props的值_vue中props传值方法

    vue中props传值方法 1.开发环境 vue 2.电脑系统 windows10专业版 3.在使用 vue开发的过程中,我们经常会使用 props进行组件的传值,下面是我的分享,希望对你有所帮助! ...

最新文章

  1. [kuangbin带你飞]专题六-生成最小树
  2. 关于C#值类型,引用类型,值传递,引用传递
  3. python urllib.request 爬虫 数据处理-python之爬虫(三) Urllib库的基本使用
  4. gpu装linux系统显示黑屏,linux操作系统安装gpu版本的paddlepaddle出现问题
  5. html密码框不显示,密码框中密码的显示与隐藏切换(JS)
  6. java 8 lambda表达式中的异常处理
  7. 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
  8. axios添加自定义头部出现的问题
  9. 3项目里面全局用less变量 cli vue_Vue实战14——抽离全局less变量与Vuex持久化、多模块构建...
  10. aws rds监控慢sql_将AWS S3存储桶与AWS RDS SQL Server集成
  11. Docker 架构原理剖析,万字详解!
  12. 华为设备如何将接口配置为中继模式_(完整版)华为设备基本配置命令
  13. python查询手册_Python 手册
  14. 图文演示戴尔win10重装系统步骤
  15. 格力悄悄上架“大松5G手机”董明珠又杀回手机圈了?
  16. excel多个表格数据汇总之汇总指定名称工作表
  17. python shell 运行py文件,python怎么运行py文件
  18. 杰理之脑连接样机蓝牙 , 开启音量同步 , 电脑无法大范围 量 调节音量【篇】
  19. 案例:淘宝点击关闭二维码
  20. 《JavaScript设计模式》读后感 觉很复杂

热门文章

  1. Ftp在Linux和Windows本地登录和远程登陆操作:
  2. 爬虫之哔哩哔哩弹幕的获取
  3. clion使用技巧大全
  4. 多段曲线控温“核函数“算法分析(完整梯形图源代码)
  5. c语言行列的互换及常见的错误类型
  6. ADC0809原理及控制详解
  7. Java 8 辣么大(lambda)表达式不慌之—–(五)示例-Collectors中的统计、分组、排序等
  8. 闭环系统的零极点图判定稳定性_自动控制原理课件第3章.ppt
  9. 模仿知乎——实现一个多用户在线问答平台
  10. 基于百问网IMX6ULL_PRO开发板的Uboot移植(Uboot-2017.03)