关于在背景上进行手绘并且保存的效果实现

做停车位项目的时候,想要实现在自己拍照上传的图片作为背景手绘车位的路线图,虽然最后因为图片压缩丢像素和让设计吐槽制作的不专业(主要还是领导决定不要了,就不了了之了。。。),但是当中遇到了一个问题所以觉得记一下毕竟也是让自己头疼了一阵。

上传的大致流程就是拍照之后照片存储到本地的同时也上传到服务器上(此时已经经历了一次压缩),然后从服务器上下载下来进行手绘(说到手绘就用了一个比较6的三方,在这里贴上GitHub的链接GitHub - zzyyppqq/DrawingBoard: 手绘板)下载之后当做背景然后使用第三方进行绘话然后将背景图和涂鸦一起进行保存,在保存这里就出现了问题

    /**
     * Returns a new bitmap associated with drawed canvas
     *
     * @return
     */
    public Bitmap getBitmap() {
        if (paths.size() == 0)
            return null;

        if (bitmap == null) {
            bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            bitmap.eraseColor(background);
        }

        Canvas canvas = new Canvas(bitmap);
        for (Pair<Path, Paint> p : paths) {
            canvas.drawPath(p.first, p.second);
        }
        return bitmap;
    }

这个方法是用来返回涂鸦的图片的,但是bitmap是不允许在原图上进行修改,所以三方就记录了你每一笔画的坐标然后新建一个bitmap对象重新设置了一个纯色的背景再将之前记录的每一笔重新画上去,但是这样就仅仅得到了一个背景是白色的涂鸦图片((╯‵□′)╯︵┻━┻,那我到底在忙些什么),所以不行。然后就只能再想办法,小白没啥经验只好去问大佬,嗯 实现了效果,有个可靠地大佬还是不错的。

1.png

就是用FrameLayout布局把滑板控件包裹起来然后调用方法


mFl_llllll = (FrameLayout) view.findViewById(R.id.fl_llllll);
mFl_llllll.setDrawingCacheEnabled(true);
mFl_llllll.buildDrawingCache();
bitmap=mFl_llllll.getDrawingCache();

通过getDrawingCache()方法返回布局所包含的并且转化成bitmap对象,是的没错,你在想我就是进行了截图处理,然后我去查了一下,是的。。。可以用来作为截图功能实现的原理。虽然最后效果实现出来了,但是因为手绘本身就比较LOW(客户会需要一个标识什么的,我这里只有笔直的一道道弯,还有因为像素损失的太多,直线都变成锯齿了,曲线跟金轮法王的武器似的),所以最后并没有采用。不过把效果实现出来了也是挺让人开心的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,221评论 25 709
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,039评论 3 119
  • 踱步在缅因街上 忙碌的气息吹来 那些数字命名的街巷 都吹向转角的星巴克 可我觉得 这些并没有什么特别的 夜色匆匆 ...
    安城的真金阅读 3,056评论 0 4
  • 在OS X 10.7 以上的系统。苹果为NSScrollView下拉增加了 橡皮、弹簧的动画效果。有时候这个效果并...
    jifu阅读 4,558评论 0 0
  • 夜晚,幽静的月光透过散进来,它好像照亮了我,让我明白一切都已成回忆 。 那时候原本以为爱情会永远陪伴。 原本已经习...
    滥_情人阅读 1,449评论 0 0