优动漫PAINT中的混合模式和效果体验

上次优动漫PAINT入门宝典给大家讲了图层中的混合模式的特点,这次将结合具体图例(下图所示图像),讲解使用混合模式将得到怎样的视觉效果。

 

图层模式

上图所示为两个独立的图层,这里主要是要变更上图层(心形图案)的混合模式。

图层模式

正常

可在下图层中直接层叠上所要设置的图层及其颜色。

图层模式

变暗

将底下图层的颜色与要叠加的图层的颜色进行比较,选择较暗的作为混合的结果显示出来。

图层模式

正片叠底

将选定要设置的图层颜色与其下面的图层颜色进行叠加处理,混合后的颜色较之原来的颜色要暗。多用于填充阴影等场合。

图层模式

颜色加深

可获得银盐照片的“颜色加深”效果。将底层的颜色变暗,有点类似于正片叠底,但不同的是,[颜色加深]模式会根据叠加的像素颜色相应地增加底层的对比度。

图层模式

线性加深

通过降低亮度,将底层变暗以反映混合色彩。

图层模式

减去

将底层图层与上层图层的颜色的的像素值相乘,混合后,比原先的颜色要暗。

图层模式

变亮

比较互相混合的图层颜色亮度,选择混合颜色中较亮的颜色加以保留合成,而其他较暗的颜色像素则被替代。

图层模式

滤色

效果与正片叠底相反,是将两个颜色的互补色的像素值相乘,并除以255得到的最终色的像素值。执行滤色混合后的颜色较之原来的颜色要浅。

图层模式

颜色减淡

通过降低对比度,加亮底层的颜色来反映混合色彩。

图层模式

颜色减淡(发光)

可获得比颜色减淡更加明显的效果。

图层模式

添加

混合两种颜色,并加亮底层的颜色,已获得更亮的效果。

图层模式

叠加

进行屏幕混合还是正片叠底,取决于底层颜色。混合后,亮的区域将变得更亮,暗的区域将变得更暗。但是底层颜色的高光与阴影部分的亮度细节会被保留。

图层模式

柔光

变暗或是提亮画面颜色,取决于上层颜色。产生的效果类似于为图像打上一盏散射的聚光灯。如果上层颜色(光源)亮度高于50%灰,底层会被照亮(变淡)。如果上层颜色(光源)亮度低于50%灰,底层会变暗,就好像被烧焦了似的。

图层模式

强光

正片叠底或是屏幕混合底层颜色,取决于上层颜色。产生的效果就好像强烈的聚光灯照在图像上一样。如果上层颜色(光源)亮度高于50%灰,图像就会被照亮,这时混合方式类似于屏幕模式。反之,如果亮度低于50%灰,图像就会变暗,这时混合方式就类似于正片叠底模式。

图层模式

差值

从底层图层的颜色减去混合色或从混合色减去底层图层的颜色,具体取决于哪一种的亮度值较大。

 

要在Paint和Canvas上绘制动态的打勾和打叉效果,可以按照以下步骤进行: 1. 创建一个自定义的View,重写它的onDraw()方法。 2. 在onDraw()方法,使用Canvas绘制一个圆圈,并设置圆圈的颜色和边框宽度。 3. 绘制打勾或打叉的动画。对于打勾效果,可以使用Path对象来绘制一条斜线和一条水平线组成的打勾形状。对于打叉效果,可以使用Path对象来绘制两条斜线组成的打叉形状。 4. 在onDraw()方法,使用Paint绘制动画效果,设置绘制的颜色和宽度。 5. 在View设置动画效果,使用ValueAnimator或ObjectAnimator来控制动画的进度,然后在onDraw()方法使用动画进度来绘制动画效果。 以下是一个简单的示例代码,可以绘制一个打勾的动态效果: ```java public class TickView extends View { private Paint mPaint; private Path mPath; private float mProgress; public TickView(Context context) { super(context); init(); } public TickView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TickView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(8); mPaint.setColor(Color.GREEN); mPath = new Path(); mPath.moveTo(50, 150); mPath.lineTo(100, 200); mPath.lineTo(200, 100); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制圆圈 canvas.drawCircle(150, 150, 100, mPaint); // 绘制打勾效果 Path dst = new Path(); PathMeasure measure = new PathMeasure(mPath, false); measure.getSegment(0, measure.getLength() * mProgress, dst, true); canvas.drawPath(dst, mPaint); } public void startAnimation() { ValueAnimator animator = ValueAnimator.ofFloat(0, 1); animator.setDuration(1000); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { mProgress = (float) animation.getAnimatedValue(); invalidate(); } }); animator.start(); } } ``` 这个示例代码,TickView继承自View,并重写了它的onDraw()方法。在init()方法,我们创建了一个Paint对象和一个Path对象,用来绘制打勾的形状。在onDraw()方法,我们首先绘制了一个圆圈,然后使用PathMeasure对象来截取Path对象的一部分,根据动画进度来绘制打勾的效果。最后,在startAnimation()方法,我们创建了一个ValueAnimator对象来控制动画的进度,并在onAnimationUpdate()方法更新动画进度,然后调用invalidate()方法来重绘View。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值