【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 表示 源图像 与 目标图像 不透明区域的并集 ;

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


目录
相关文章
|
19天前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
41 2
基于Android P,自定义Android开机动画的方法
|
19天前
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
63 2
|
19天前
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
38 1
|
19天前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
38 1
|
19天前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
124 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
26天前
|
Android开发
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
Android项目架构设计问题之onFirstItemVisibleChanged方法的调用如何解决
27 0
|
26天前
|
Java 测试技术 Android开发
Android项目架构设计问题之使用反射调用类的私有方法如何解决
Android项目架构设计问题之使用反射调用类的私有方法如何解决
14 0
|
前端开发 Android开发
Android图形绘制基础(二)
mainActivity如下: package com.cn; import android.os.Bundle; import android.
769 0
|
前端开发 Android开发
Android图形绘制基础(一)
mainActiviry如下: package com.cn; import android.app.Activity; import android.
932 0
|
2天前
|
Android开发 开发者 Kotlin
探索安卓开发中的新特性
【9月更文挑战第14天】本文将引导你深入理解安卓开发领域的一些最新特性,并为你提供实用的代码示例。无论你是初学者还是经验丰富的开发者,这篇文章都会给你带来新的启示和灵感。让我们一起探索吧!