WP8下实现刮刮乐(橡皮擦)功能
2024-10-20 15:46:47
说到刮刮乐这个功能,我们最先想到的是上下两张(长方形)重叠,之后对上面这张图片进行操作。
我的想法是:通过手势,让手指划过的地方变成透明的,底部就会显示了。
那如何让图片变为透明呢?这就要对图片的像素进行处理了。
首先,图片的像素是一个int型数组:int[], 此数组长度为图片高(像素)*宽(像素)
比如:一张图片的高宽为200pixel、400pixel,那么这个数组为int[80000]
对于每一个元素,官方文档说都是ARGB32[预乘RGB24] (A指的是Alpha通道 控制透明度的)
256级(0-255)的RGB色彩总共能组合出约1678万种色彩,即256×256×256=16777216
即每一个元素都为:(-1:白色)----- (-16777216:黑色) 0或其他正值时为透明色
通过
originalWb = new WriteableBitmap(bitmapImage);
我们获取到是一维数组,为了便于操作,我们将其转换为二维数组。
for (int i = ; i < iOriginalHeight; i++) //图片高
{
for (int j = ; j < iOriginalWidth; j++) //图片宽
{
pixelTwo[i, j] = originalWb.Pixels[i * (iOriginalWidth) + j];
}
}
之后我们在手势触摸后,我们就要处理像素了
如图所示:假设我们length=1(指的触摸后的大小吧)
如果我们选中的是红色那个位置,我就要将包括红色像素边上的距离为1的像素组成的正方形(绿色位置)变为透明
我们可以获取到绿色范围的开始结束行和列。
之后只要改变那个像素的颜色就行了。
originalWb.Pixels[(i * iOriginalWidth) + j] = ;//获取到的周边某个像素的下标为(i * l) + j
最后赋值给图片
下面给出WP8下的demo:记住:需要联网下载一张图片
PS:但是效果不是非常的好,由于使用的是正方形(可惜writeablebitmap没有WPF下的一些方法)
如果有更好的方法,希望能告诉我!
最新文章
- 2-kvm创建快照以及网卡绑定
- Eclipse关闭XML文件验证的方法
- Yosemite系统怎么录制 iOS8设备屏幕
- php复习第一章—1.1php 简介
- 支付宝C# RSA签名 报系统找不到指定的文件问题解决
- 分页sql语句优化
- DataTable 排序
- Car的旅行路线(codevs 1041)
- I.MX6 开启 1000Mb/s interface
- gulp 构建工具
- iOS开发中遇到的bug
- POJ 3070 矩阵快速幂解决fib问题
- call是什么?一次说个明白
- tkinter简单使用
- 七台机器部署Hadoop2.6.5高可用集群
- os模块学习+open行数
- 三星平板SM-T320刷机
- [CODE FESTIVAL 2016]Encyclopedia of Permutations
- struts 多文件上传 xml 版本
- centos安装zabbix(server+agent)
热门文章
- [转]推荐highcharts学习网址
- 架构实例之Demo_JSP_JavaBean_Servlet
- POJ1274 The Perfect Stall[二分图最大匹配]
- C#中TransactionScope的使用方法和原理
- Js 遍历json对象所有key及根据动态key获取值
- 直接启动tomcat时为tomcat指定JDK
- Windows phone应用开发[21]-图片性能优化
- kuangbin专题总结一 简单搜索
- android 自定义Style初探---ProgressBar
- 使用CocoaPods开发并打包静态库