前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1,2,线稿!

1,2,线稿!

作者头像
月落星河Tsukistar
发布2022-02-21 14:05:01
5160
发布2022-02-21 14:05:01
举报

“1,2,线稿!”APP的开发关键代码与演示。

最近在写OpenCV在Android上用于可见光定位的APP,在轮廓识别的时候偶然用手机里的二次元图片作为样本进行测试,发现线条十分明显,就像下面这张图这样:

转换结果
转换结果

这不就是线稿吗,或许可以写一个一键将图片转成线稿的APP,万一以后用得到呢。而且对于绘画爱好者来说至少也很方便和有用处。 于是将自己用来写可见光定位的项目复制一份,修改包名,换个Logo和背景图,然后重新设置了UI,加了长按保存图片的功能,最后各种测试和debug,两天时间,成功做出了一个稳定的版本,然后将发行版和项目放到了我的码云仓库上。

关键部分的代码:

保存图片:

代码语言:javascript
复制
//长按保存图片
    public static void saveBitmap(ImageView view, String filePath) {
        Drawable drawable = view.getDrawable();
        if (drawable == null) {
            return;
        }
        FileOutputStream outStream = null;
        File file = new File(filePath);
        if (file.isDirectory()) {//如果是目录不允许保存
            return;
        }
        try {
            outStream = new FileOutputStream(file);
            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
            outStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (outStream != null) {
                    outStream.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

刷新媒体库:

代码语言:javascript
复制
//刷新媒体库
    private void updateGallery(String filename)//filename是我们的文件全名,包括后缀哦
    {
        MediaScannerConnection.scanFile(this,
                new String[] { filename }, null,
                new MediaScannerConnection.OnScanCompletedListener() {
                    public void onScanCompleted(String path, Uri uri) {
                        Log.i("ExternalStorage", "Scanned " + path + ":");
                        Log.i("ExternalStorage", "-> uri=" + uri);
                    }
                });
    }

生成目录和随机文件名:

代码语言:javascript
复制
//随机文件名
    private String generateFileName() {
        String fileList = getExternalStorageDirectory().getAbsolutePath() + File.separator + "LineDraft" + File.separator;
        File mkdir = new File(fileList);
        if(!mkdir.exists()) mkdir.mkdir();
        @SuppressLint("SimpleDateFormat") DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");// 获得当前时间
        String formatDate = format.format(new Date());// 转换为字符串
        int random = new Random().nextInt(10000);// 随机生成文件编号
        return (fileList + formatDate + random + ".png");
    }

由于只使用了ARM架构的OpenCV库,在红米Note1和小米6X上测试时均可流畅运行,因而目前认为支持现有的几乎所有的安卓智能手机,对安卓平板是否兼容尚不可知。

除另有声明外,本博客文章均采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明文章出处。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关键部分的代码:
    • 保存图片:
      • 刷新媒体库:
        • 生成目录和随机文件名:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档