位图处理

简介: 引用:http://blog.sina.com.cn/s/blog_6859df3701014w6j.html 其实获取非位图矩形区域只需要一句代码 var notRedBounds:Rectangle = bmd.

引用:http://blog.sina.com.cn/s/blog_6859df3701014w6j.html

其实获取非位图矩形区域只需要一句代码
var notRedBounds:Rectangle = bmd.getColorBoundsRect(0xFF000000, 0x00000000, false);
查了下bitmapdata的API 对这块的解释
getColorBoundsRect () 方法  
public function getColorBoundsRect( mask:uint , color:uint , findColor:Boolean=true): Rectangle 

确定矩形区域是将位图图像中指定颜色的所有像素完全包括起来(如果将 findColor 参数设置为 true),还是将不包括指定颜色的所有像素完全包括起来(如果将 findColor 参数设置为 false)。

 

参数

mask:uint — 一个十六进制值,指定要考虑的 ARGB 颜色的位。 通过使用 &(按位 AND)运算符,将颜色值与此十六进制值合并。

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

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

返回

Rectangle — 指定颜色的图像区域。

   

 

API上的demo用的色值还是RGB,又上网google了一下
摘自唔系衰人的博客:(地址: http://wxsr.blogbus.com/logs/41243416.html
 
首先,我们应该知道 png图是ARGB制式,也就是说出类红绿蓝3通道外还带一alpha的透明通道 一个16进制的通道值大致是0xAARRGGBB 除0x外每两个数代表一组,前两个代表通明通道,ff是最大值,00是最小值,其他3通道一样。
“上边的0xFF000000代表的是透明度最大,0x00000000代表的是完全透明的 通过对 getColorBoundsRect参数的理解 我们知道 mask是一个颜色值合并参数,他会先对bitmapdata的所有像素进行合并,然后根据第二个匹配参数 也就是完全透明的的值进行匹配,最后根据findColor返回匹配的结果, 正果过程就是将bitmapdata的所有像素匹配完全透明值,返回非透明的实际矩形范围。 这样子我们就可以得到我们所需要的实际包图像范围了~ 再来就是扣图, 扣图我们用到BitMapData.threshold() 通过这个方法我们可以很方便排除我们不想要的颜色值来获取我们实际需要的图像”
 
 
于是 我修改了一下官方API做了如下测试  注意new bitmapdata的时候 最后一个参数要改成0x00000000 要新建一个完全透明的biamapdata
var bmd:BitmapData = new BitmapData(80, 40, true, 0x00000000);
var rect:Rectangle = new Rectangle(0, 20, 80, 40);
bmd.fillRect(rect, 0xFFFF0000);
var maskColor:uint = 0xFF000000; 
var color:uint = 0x00000000;  
var redBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color, true);
trace(redBounds); // (x=0, y=0, w=80, h=20) 非透明区域
var notRedBounds:Rectangle = bmd.getColorBoundsRect(maskColor, color,false);
trace(notRedBounds); // (x=0, y=20, w=80, h=20)透明区域
var bm:Bitmap = new Bitmap(bmd);
addChild(bm);
 
因为新的图像坐标已经偏移,可以通过notRedBounds.x notRedBounds.y 来调整图像位置
相关文章
|
23小时前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1051 0
|
10天前
|
人工智能 运维 安全
|
23小时前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
239 0
|
7天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
716 23