美文网首页
图像合成(二)- Region.Op

图像合成(二)- Region.Op

作者: 如果时光不来 | 来源:发表于2022-03-28 15:57 被阅读0次

Region.Op


image.png

不同模式合成的效果:

A:表示第一个裁剪的形状 - 矩形;
B:表示第二次裁剪的形状 - 圆形;


Region.Op

Region.Op.DIFFERENCE :是A形状中不同于B的部分显示出来
Region.Op.REPLACE:是只显示B的形状
Region.Op.REVERSE_DIFFERENCE :是B形状中不同于A的部分显示出来,这是没有设置时候默认的
Region.Op.INTERSECT:是A和B交集的形状
Region.Op.UNION:是A和B的全集
Region.Op.XOR:是全集形状减去交集形状之后的部分

具体使用:

class LiveCover(context: Context, attrs: AttributeSet?) : View(context, attrs) {
 
    var clipRect = RectF()
    var clipPath = Path()
    var roundCornerSize = 0f
    var clipRectLeft = 0f
    var clipRectTop = 0f
    var clipRectWidth = 0f
    var clipRectHeight = 0f
    var screenWidth = 0
    var screenHeight = 0
    var pptWidth = 0
    var pptHeight = 0
 
    //计算适配课件区域位置。
    init {
        screenWidth = DensityUtils.getScreenWidth(context)
        screenHeight = DensityUtils.getScreenHeight(context)
 
        pptHeight = LIVE_PPT_TEACHER_HEIGHT * screenHeight / LIVIE_TEACHER_HEIGHT_BASE
        pptWidth = pptHeight * 16 / 9
 
        roundCornerSize = DensityUtils.dpToPx(context, 20f).toFloat()
        clipRectLeft = (screenWidth / 2 - pptWidth / 2).toFloat()
        clipRectTop = (LIVE_PPT_TEACHER_TOP * screenHeight / LIVIE_TEACHER_HEIGHT_BASE).toFloat()
        clipRectWidth = clipRectLeft + pptWidth
        clipRectHeight = clipRectTop + pptHeight
    }
 
    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        clipRect.left = clipRectLeft
        clipRect.top = clipRectTop
        clipRect.right = clipRectWidth
        clipRect.bottom = clipRectHeight
 
        clipPath.addRoundRect(clipRect, roundCornerSize, roundCornerSize, Path.Direction.CW)
        canvas?.clipPath(clipPath, Region.Op.DIFFERENCE)
        canvas?.drawColor(0xff1E1A33.toInt())
//        canvas?.drawColor(Color.RED)
    }
}

通过clipRect/clippath等来进行剪裁,上下层画布可以拼接成不同的图案效果,来合成绘制到view上。

那么画布剪裁漏了,view就能漏了么?是的,为什么呢?

Canvas和View的关系?
view可以当做是容器屏幕显示的效果

canvas可以看作是一个透明的图层,我们每次调用canvas的draw...方法都会产生一个透明的层


canvas图层

这个图层是无限大的,超出屏幕部分不可见而已。
translate(dx,dy) 和 scale等都是操作画布的,

相关文章

  • 图像合成(二)- Region.Op

    Region.Op 不同模式合成的效果: A:表示第一个裁剪的形状 - 矩形;B:表示第二次裁剪的形状 - 圆形;...

  • MAC AE快捷键

    项目窗口 合成图像、层和素材窗口 时间布局窗口中的移动 预示 合成图像、层和素材窗口中的编辑 在合成图像窗口和时间...

  • 第二天 图像合成与渐变工具

    (一)图像合成 ** 合成:把各种图像的部分元素抠选出来,放在一个画布中,形成一个新的画面。** 抠图:把图像中某...

  • 图像风格迁移

    用一个例子来阐述基于卷积神经网络的样式迁移方法。首先,我们初始化合成图像,例如将其初始化成内容图像。该合成图像是样...

  • canvas(五) 使用图像

    使用图像 canvas 具有操作图像的能力。可以用于动态的图像合成或者作为图像的背景,以及游戏界面(Sprites...

  • 第 01 讲 光和色的关系

    Photoshop 是什么软件? Photoshop 是图像合成软件,更注重的是合成,而不是绘制、创作。 HSB ...

  • PS基础

    PS:平面的二维的图像合成软件。而合成又指在已有素材上进行再加工,所以ps不是用来创作的,用ps画画还不如直接去拍...

  • Canvas学习笔记之图像处理

    Canvas 学习笔记 -- by Damon canvas对于图像的操作能力 功能:动态的图像合成、图形的背景、...

  • SurfaceFlinger图像合成[1]

    Layer接收到新的GraphicBuffer Layer中接收到其生产者产生的GraphicBuffer后会接收...

  • SurfaceFlinger图像合成[2]

    上一篇介绍了在Vsync到来时, SF首先会处理Layer属性变化, 显示设备变化等情况,然后将mCurrentS...

网友评论

      本文标题:图像合成(二)- Region.Op

      本文链接:https://www.haomeiwen.com/subject/asjdjrtx.html