【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )

简介: 【Android 应用开发】Paint 图形组合 Xfermod 之 合成模式表示方法 ( Xfermod 使用步骤 | 透明度 颜色值 公式表示方法 | 老版本表示方法 | 合成区域分块 )

Xfermod 使用步骤


Xfermod 使用步骤 :



① 创建画笔 : 注意 , 绘制 源图像 和 目标图像 , 以及设置 Xfermod 图形组合模式 , 使用的都是这个画笔 ;


//创建画笔
 Paint paint = new Paint();



② 绘制 目标图像 ( Destination Image ) : 先绘制的是目标图像 , 设置 Xfermod 图形组合模式后 , 绘制的是源图像 ;


//绘制目标图像 ( Destination Image )
 canvas.drawBitmap(destinationImage, 0, 0, paint);


③ 设置 Xfermod 图形组合模式 : 设置 18 种 Xfermod 模式之一 , 创建 PorterDuffXfermode 对象 ( 传入模式对应的常量 ) , 将 Xfermod 对象设置给画笔 Paint 对象 ;


PorterDuff.Mode mode = // choose a mode
 paint.setXfermode(new PorterDuffXfermode(mode));


④ 绘制 目标图像 ( SourceImage ) : 先绘制的是目标图像 , 设置 Xfermod 图形组合模式后 , 绘制的是源图像 ;

//绘制 源图像 ( SourceImage ) 
 canvas.drawBitmap(sourceImage, 0, 0, paint);



⑤ 代码总结 : 使用 Xfermod 的四个步骤 :


// 1.创建画笔
 Paint paint = new Paint();
 // 2.绘制目标图像
 canvas.drawBitmap(destinationImage, 0, 0, paint);
 // 3.设置 Xfermod 图形组合模式
 PorterDuff.Mode mode = // choose a mode
 paint.setXfermode(new PorterDuffXfermode(mode));
 // 4.绘制 源图像 ( SourceImage ) 
 canvas.drawBitmap(sourceImage, 0, 0, paint);



合成方程 ( Compositing equations )


合成对象 :


1.目标图像 ( Destination Image ) : 先绘制 的图像 是目标图像 ;

image.png

2.源图像 ( Source Image ) : 设置 Xfermod 之后 , 后绘制的图像 是 源图像 ;

image.png

方程中的相关变量说明 :


1.目标图像相关 :

① 目标图像 指定像素位置 的透明度 : α d s t \alpha_{dst}α

dst


 ;

② 目标图像 指定像素位置 的颜色值 : C d s t C_{dst}C

dst


 ;

2.源图像相关 :

① 源图像 指定像素位置 的透明度 : α s r c \alpha_{src}α

src


 ;

② 源图像 指定像素位置 的颜色值 : C s r c C_{src}C

src


 ;

3.合成结果相关 :

① 合成后 指定像素位置 的透明度 : α o u t \alpha_{out}α

out


 ;

② 合成后 指定像素位置 的颜色值 : C o u t C_{out}C

out


 ;

合成方程 :


1.方程来源 : 每一个独立的 透明度合成模式 或者 混合合成模式 都 提供了对应的方程 ;

2.方程作用 : 这些方程用于计算 源图像 与 目标图像 合成结果的 对应像素点的 透明度 和 颜色值 ;



老版本的表示方法


老版本的表示方法 :


1.目标图像相关 : [ D a , D c ] [D_a , D_c][D

a


,D

c


] , 表示该目标图像的透明度和颜色值属性 ;

① 目标图像 指定像素位置 的透明度 : D a D_aD

a


 ;

② 目标图像 指定像素位置 的颜色值 : D c D_cD

c


 ;

2.源图像相关 : [ S a , S c ] [S_a , S_c][S

a


,S

c


] , 表示该源图像的透明度和颜色值属性 ;

① 源图像 指定像素位置 的透明度 : S a S_aS

a


 ;

② 源图像 指定像素位置 的颜色值 : S c S_cS

c


 ;

3.合成结果相关 : [ R a , R c ] [R_a , R_c][R

a


,R

c


] , 表示该合成结果图像的透明度和颜色值属性 ;

① 合成后 指定像素位置 的透明度 : R a R_aR

a


 ;

② 合成后 指定像素位置 的颜色值 : R c R_cR

c


 ;



合成模式 相关 区域


合成区域描述 :


① 集合 S SS 表示 源图像素 不透明区域 ;

② 集合 D DD 表示目标图像像素 不透明区域 ;

③ 集合 R RR 表示绘制结果的不透明区域 ;

④ 集合 A AA 代表全集所有区域 ( 整个框透明 + 不透明所有区域 ) ;

⑤ 集合 S ∩ D S \cap DS∩D 表示 源图像 与 目标图像 不透明区域的交集 ;

⑥ 集合 S ∪ D S \cup DS∪D 表示 源图像 与 目标图像 不透明区域的并集 ;

之后的每个模式都要分析上述某几个区域的 透明度 和 颜色值 ;


目录
相关文章
|
3月前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
122 3
|
7月前
|
API Android开发 开发者
Android颜色渐变动画效果的实现
本文介绍了在Android中实现颜色渐变动画效果的方法,重点讲解了插值器(TypeEvaluator)的使用与自定义。通过Android自带的颜色插值器ArgbEvaluator,可以轻松实现背景色的渐变动画。文章详细分析了ArgbEvaluator的核心代码,并演示了如何利用Color.colorToHSV和Color.HSVToColor方法自定义颜色插值器MyColorEvaluator。最后提供了完整的源码示例,包括ColorGradient视图类和MyColorEvaluator类,帮助开发者更好地理解和应用颜色渐变动画技术。
229 3
|
7月前
|
Android开发
Android护眼模式(argb)
这是一篇关于实现护眼模式的技术文章。通过动态添加一个透明的帧布局(FrameLayout),并设置其不可触碰、不可聚焦,覆盖在应用界面之上。利用 `Color.argb()` 方法设置带有透明度的背景色,提供两种流行护眼色(浅绿和深绿)。开启护眼模式时,为帧布局设置计算好的颜色;关闭时恢复透明。若需全局生效,可在 BaseActivity 中初始化并调用相关方法。此方案简单高效,适合快速集成护眼功能。
260 1
|
7月前
|
Android开发 开发者
Android自定义view之利用drawArc方法实现动态效果
本文介绍了如何通过Android自定义View实现动态效果,重点使用`drawArc`方法完成圆弧动画。首先通过`onSizeChanged`进行测量,初始化画笔属性,设置圆弧相关参数。核心思路是不断改变圆弧扫过角度`sweepAngle`,并调用`invalidate()`刷新View以实现动态旋转效果。最后附上完整代码与效果图,帮助开发者快速理解并实践这一动画实现方式。
180 0
|
7月前
|
Java Android开发
Android背景颜色滑动渐变效果(上下滑动,左右滑动)
本文分享了一种通过ScrollView实现滑动变色效果的简单方法。主要步骤包括:1) 在布局中添加ScrollView并确保内容可滑动;2) 获取屏幕高度;3) 获取控件高度;4) 使用GradientDrawable设置渐变颜色;5) 根据控件与屏幕高度比例动态调整颜色数量。示例代码展示了如何在滑动时根据比例改变背景颜色,实现流畅的视觉效果。
210 0
|
5月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
364 11
|
存储 XML 开发工具
探索安卓应用开发:从基础到进阶
在这篇文章中,我们将一起踏上安卓应用开发的旅程。不论你是编程新手还是希望提升技能的开发者,这里都有你需要的东西。我们会从最基础的概念开始,逐步深入到更复杂的主题。文章将涵盖开发环境设置、用户界面设计、数据处理以及性能优化等方面。通过理论与实践的结合,你将能够构建出既美观又高效的安卓应用。让我们一起开启这段技术之旅吧!
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
7月前
|
Android开发 开发者
Android自定义view获取attr中自定义颜色的问题
本文针对Android自定义View在布局中设置颜色时遇到的问题进行分析与解决。问题表现为通过`getAttributeIntValue`方法获取颜色时,使用资源引用(如`@color/colorPrimary`)无法正确获取,而直接使用十六进制颜色值(如`#ff0000`)则正常。经过源码分析,发现是属性格式定义及获取方式不当导致。解决方案为将`attrs`文件中颜色属性的格式改为`reference|color`,并使用`TypedArray`的`getColor`方法获取颜色值,确保资源引用和直接颜色值均能正确解析。希望本文能帮助遇到类似问题的开发者。
131 0
|
12月前
|
搜索推荐 Android开发 开发者
安卓应用开发中的自定义控件实践
在安卓应用开发的广阔天地中,自定义控件如同璀璨的星辰,点亮了用户界面设计的夜空。它们不仅丰富了交互体验,更赋予了应用独特的个性。本文将带你领略自定义控件的魅力,从基础概念到实际应用,一步步揭示其背后的原理与技术细节。我们将通过一个简单的例子——打造一个具有独特动画效果的按钮,来展现自定义控件的强大功能和灵活性。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往更高阶UI设计的大门。
160 2