绘制人脸形状

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class FaceGraphicView extends View {

    private Point leftTop;
    private Point rightTop;

    private Point leftBottom;
    private Point rightBottom;
    private Point startPoint;
    private Point endPoint;
    private int screenWidth;
    private int screenHeight;

    private Paint paintBezier;
    private Paint paintLine;

    public FaceGraphicView(Context context) {
        this(context, null);
    }

    public FaceGraphicView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public FaceGraphicView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setBackgroundColor(0x33000000);
        if (android.os.Build.VERSION.SDK_INT >= 11) {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
        paintBezier = new Paint();
        paintBezier.setStyle(Paint.Style.FILL);
        paintBezier.setColor(Color.TRANSPARENT);
        paintBezier.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

        paintLine = new Paint();
        paintLine.setStyle(Paint.Style.STROKE);
        paintLine.setColor(0xFF1D77EC);
        paintLine.setStrokeWidth(3);

        DisplayMetrics dm = context.getResources()
                .getDisplayMetrics();
        screenWidth = dm.widthPixels;
        screenHeight = dm.heightPixels;

        int leftSpace = (int) (screenWidth / 6.5f);
        leftTop = new Point(leftSpace, (int) (leftSpace * 0.5f));
        rightTop = new Point(screenWidth - leftSpace, leftTop.y);
        startPoint = new Point(leftTop.x, (int) (leftSpace * 3));
        endPoint = new Point(rightTop.x, startPoint.y);
        leftBottom = new Point(leftTop.x, (int) (startPoint.y * 2.5f));
        rightBottom = new Point(rightTop.x, leftBottom.y);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // 回执
        Path path = new Path();
        path.moveTo(startPoint.x, startPoint.y);
        path.cubicTo(leftTop.x, leftTop.y, rightTop.x, rightTop.y, endPoint.x, endPoint.y);
        //绘制透明层
        canvas.drawPath(path, paintBezier);
        // 回执线条
        canvas.drawPath(path, paintLine);

        Path path1 = new Path();
        path1.moveTo(startPoint.x, startPoint.y);
        path1.cubicTo(leftBottom.x, leftBottom.y, rightBottom.x, rightBottom.y, endPoint.x, endPoint.y);
        //绘制路径
        canvas.drawPath(path1, paintBezier);
        // 回执线条
        canvas.drawPath(path1, paintLine);
    }

}

时间: 2024-07-30 19:08:25

绘制人脸形状的相关文章

安卓自己定义View进阶-Canvas之绘制基本形状

Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zhuang)用(B), 这一次我们就了解一些能(zhaung)用(B)的东西. 在本篇文章中,我们先了解Canvas的基本用法,最后用一个小演示样例来结束本次教程. 一.Canvas简单介绍 Canvas我们能够称之为画布,能够在上面绘制各种东西,是安卓平台2D图形绘制的基础,非常强大. **一般来说

玩转Android Camera开发(五):基于Google自带算法实时检测人脸并绘制人脸框(网络首发,附完整demo)

本文主要介绍使用Google自带的FaceDetectionListener进行人脸检测,并将检测到的人脸用矩形框绘制出来.本文代码基于PlayCameraV1.0.0,在Camera的open和preview流程上进行了改动.原先是放在单独线程里,这次我又把它放到Surfaceview的生命周期里进行打开和开预览. 首先要反省下,去年就推出了静态图片的人脸检测demo,当时许诺一周内推出Camera预览实时检测并绘制的demo,结果拖到现在才整.哎,屌丝一天又一天,蹉跎啊.在demo制作过程中

如何用 CSS 绘制各种形状

自适应的椭圆 1.自适应的椭圆 实现方式是通过border-radius这个属性:border-radius它可以单独指定水平和垂直半径.用 / 分隔这两个值.并且该属性的值不仅可以接受长度值,还能接收百分比的值.百分比的值会基于元素的尺寸进行解析,宽是水平半径的解析,高是垂直半径的解析. 所以可以把两个半径的值都设置成50%: border-radius: 50% / 50%; /* 值都是50% 就可以简化成 border-radius: 50%; */ 最终的效果: 2.半椭圆的实现 bo

css绘制各种形状

代码:http://runjs.cn/code/9lyjtbxl: 效果:http://sandbox.runjs.cn/show/9lyjtbxl <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>border</title> <style type="text/css">

转(matlab绘制不同形状)

标记符    点形 +          加号 o          圆圈 *          星号 .          实心点 x         叉号 s         正方形 d         钻石形 ^         上三角形 v         下三角形 >        右三角形 <        左三角形 p        五角星形 h        六角星形 原文地址:https://www.cnblogs.com/oucxlw/p/9260538.html

Android中绘制圆角矩形图片及任意形状图片

圆角矩形图片在苹果的产品中很流行,相比于普通的矩形,很多人都喜欢圆角矩形的图片,因为它避开了直角的生硬,带来更好的用户体验,下面是几个设计的例子: 下面在Android中实现将普通的矩形图片绘制成圆角矩形.首先看最终效果: 代码清单: package com.example.phototest; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android

(一)在 Blend 中绘制形状和路径

原文:(一)在 Blend 中绘制形状和路径 https://docs.microsoft.com/zh-cn/previous-versions/jj170881(v=vs.120) 在 Blend 中绘制形状和路径 2015/07/21 在 Blend 中,形状正是你所期望的内容. 例如:矩形.圆或椭圆. 路径是更加灵活的形状版本. 你可以执行某些操作,如重新调整它们的形状,或将它们合并在一起以形成新形状. 形状和路径使用矢量图形,因此它们可很好地按高分辨率显示进行缩放. 如果想要了解有关矢

OpenGL简单绘制游戏角色阴影

在游戏开发中很多Q版游戏绘制角色阴影会简单的绘制一个半透明的椭圆,如下图: 这种方法的优点是实现简单,但表现效果明显不够真实.作为Q版风格尚可被玩家接受,而对于写实类游戏,多采用由美术提供针对性制作的图片作为阴影图层.这种方案效果最为理想,缺点是需要多制作大量的图片资源,使游戏包增加不少. 在最近的开发中,我想到了另一种角色阴影图形的绘制方法,这里把它分享给大家. 原理很简单,就是利用OpenGL的图像变形技术,通过把角色自身的图片进行调整,使之变成一个阴影图像. 先上效果图: 具体实现: Op

用Sketch和PaintCode快速得到绘制代码

http://www.cocoachina.com/ios/20150901/13155.html 作者:codeGlider 授权本站转载. 在我的上一篇文章中 swift10分钟实现炫酷的导航控制器跳转动画,有一个swift logo的形状 上一篇文章的动画 我说的就是中间用来做遮罩的形状. 它不是图片是用一段代码绘制而成的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24     //绘制swift logo