美文网首页
(译)PorterDuff.Mode

(译)PorterDuff.Mode

作者: tandeneck | 来源:发表于2018-05-20 16:33 被阅读0次

    第一次翻译文章,不当之处请多指教。原文链接

    类继承结构

    public static final enum PorterDuff.Mode
            extends Enum<PorterDuff.Mode>
    java.lang.Object
       ↳    java.lang.Enum<android.graphics.PorterDuff.Mode>
       ↳    android.graphics.PorterDuff.Mode
    

    Porter-Duff

    Porter-Duff 这个类名是为了表达对 Thomas Porter 和 Tom Duff 的敬意,他们于 1984 年发表了一篇名为 “Compositing Digital Images”(合成数字图像)的开创性论文。在这篇文章中,两位作者描述了12种合成操作符,具体来说就是当我们把原图像绘制到目标图像处时应该如何计算二者结合后的颜色。

    “Compositing Digital Images”(合成数字图像)于1984 年 7 月 发表在计算机图形期刊第18期,第3页。

    由于 Porter 和 Duff 的工作只关注原图像和目标图像共同绘制对 alpha 通道(即我们所理解的透明度)的影响,所以我们又把在他们论文所提到的12种操作称为 alpha 合成模式

    方便起见,PorterDuff 类中也提供了混合模式,它们类似于alpha合成模式,只不过它们不仅仅是限制在 alpha 通道(RGB可能都有涉及)。Porter 和 Duff 的文章中并没有涉及到这些混合模式的操作,只不过是为了方便的目的我们才把这些操作包含进 PorterDuff 这个类中。

    图像

    下面所有的图像示例都是基于相同的原图像和目标图像

    Source image.png Destination image.png

    下面代码展示了用于生成每个图像的绘制顺序:

    Paint paint = new Paint();
    canvas.drawBitmap(destinationImage, 0, 0, paint);
    PorterDuff.Mode mode = // choose a mode
    paint.setXfermode(new PorterDuffXfermode(mode));
    canvas.drawBitmap(sourceImage, 0, 0, paint);
    

    Alpha 合成模式

    Source.png Source Over.png Source In.png Source Atop.png
    Destination.png Destination Over.png Destination In.png Destination Atop.png
    Clear.png Source Out.png Destination Out.png Exclusive Or.png

    混合模式

    Darken.png Lighten.png Multiply.png
    Screen.png Overlay.png

    合成方程

    以下每个单独的 alpha 合成或混合模式的文档提供了计算原图像和目标图像合成之后的 alpha 值和颜色值的精确方程。

    alpha 的结果(输出值)记为
    颜色的结果(输出值)记为

    概要

    • PorterDuff.Mode
      ADD
    将源像素添加到目标像素并使饱和度叠加
    • PorterDuff.Mode
      CLEAR


      被源像素覆盖的目标像素被清除为0
    • PorterDuff.Mode
      DARKEN


      保留源像素、目标像素的较小值
    • PortDuff.Mode
      DST


      丢弃源像素,保留目标像素
    • PortDuff.Mode
      DST_ATOP


      丢弃未被源像素覆盖的目标像素
    • PortDuff.Mode
      DST_IN


      保留覆盖源像素的目标像素,丢弃剩余的源像素和目标像素
    • PortDuff.Mode
      DST_OUT


      保留未被源像素覆盖的目标像素
    • PortDuff.Mode
      DST_OVER


      源像素绘制在目标像素后面
    • PortDuff.Mode
      LIGHTEN


      保留源像素、目标像素的较小值
    • PortDuff.Mode
      MULTIPLY


      将源像素和目标像素进行Multiply(正片叠底)
    • PortDuff.Mode
      OVERLAY


      像素是进行 Multiply(正片叠底)混合还是 Screen(屏幕)混合,取决于目标颜色
    • PortDuff.Mode
      SCREEN


      将源像素和目标像素相加,然后减去乘以目标元素的源像素
    • PortDuff.Mode
      SRC


      只保留源像素
    • PortDuff.Mode
      SRC_ATOP


      丢弃未覆盖目标像素的源像素
    • PortDuff.Mode
      SRC_IN


      保持覆盖目标像素的源像素,丢弃剩余的源像素和目标像素
    • PortDuff.Mode
      SRC_OUT


      只保留不包含目标像素的源像素
    • PortDuff.Mode
      SRC_OVER


      源像素绘制在目标像素上
    • PortDuff.Mode
      XOR


      丢弃源像素覆盖目标像素的源像素和目标像素 CodeCogsEqn (35).png

    总结

    其实整篇下来,也没有几个英文单词,就是一直粘图。不过算是一个好的开始,因为工作中涉及到这方面的内容,算是巩固总结啦。顺便安利一下这篇个人觉得不错的文章各个击破搞明白PorterDuff.Mode

    相关文章

      网友评论

          本文标题:(译)PorterDuff.Mode

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