zoukankan      html  css  js  c++  java
  • getColorBoundsRect() BitmapData抠图

    为什么要去扣图?

    扣图的一般应用主要是为了处理一些png图片的大小问题,

    bitmapdata的大小消耗是bitmapdata的高宽大小决定的,

    因为一张png图包含的透明部分而设计往往懒于将每张图片都做到最小,

    所以一般这部分应该使用程序实现的,我们可以编写一个air项目对图片进行批处理,

    也可以根据实际在程序运行期间实现对图像大小的优化。

    怎么样去扣图?

    主要方法用到getColorBoundsRect来获取非透明区域的大小,

    getColorBoundsRect的参数可以方便的让我们赛选出非透明区域

    处理过程如下:bitmapdata.getColorBoundsRect(0xFF000000,0x00000000,false) ,

    为什么要定义这样两个参数来排除区域?

    首先,png图是ARGB制式除了红绿蓝3通道外还带一alpha的透明通道 ,

    一个16进制的通道值大致是0xAARRGGBB ,除0x外每两个数代表一组,

    前两个代表通明通道,ff是最大值,00是最小值,其他3通道一样。

    getColorBoundsRect参数的说明如下:

    mask:uint — 一个十六进制值,指定要考虑的 ARGB 颜色的位。

     通过使用 &(按位 AND)运算符,将颜色值与此十六进制值合并。

     color:uint — 一个十六进制值,指定要匹配(如果 findColor 设置为 true)或不 匹配(如果 findColor 设置为 false)的 ARGB 颜色。

    findColor:Boolean (default = true) — 如果该值设置为 true,则返回图像中颜色值的范围。 如果该值设置为 false,

    则返回图像中不存 上边的0xFF000000代表的是透明度最大,0x00000000代表的是完全透明的

    通过对 getColorBoundsRect参数的理解 我们知道 mask是一个颜色值合并参数,

    他会先对bitmapdata的所有像素进行合并,然后根据第二个匹配参数

    也就是完全透明的的值进行匹配,最后根据findColor返回匹配的结果,

    正果过程就是将bitmapdata的所有像素匹配完全透明值,返回非透明的实际矩形范围。

     这样子就可以得到所需要的实际包图像范围了~ 再来就是扣图,

    扣图我们用到BitMapData.threshold() 通过这个方法

    可以很方便排除不想要的颜色值来获取实际需要的图像,

    原理跟上边说的大致一样。

  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/602147629/p/1999522.html
Copyright © 2011-2022 走看看