banner
月落星河Tsukistar

月落星河Tsukistar

浩瀚中的伟大,孤独间的渺小
github
twitter
youtube
bilibili
email

1, 2, 請注意!

最近在寫 OpenCV 在 Android 上用於可見光定位的 APP,在輪廓識別的時候偶然用手機裡的二次元圖片作為樣本進行測試,發現線條十分明顯,就像下面這張圖這樣:
轉換結果
這不就是線稿嗎,或許可以寫一個一鍵將圖片轉成線稿的 APP,萬一以後用得到呢。而且對於繪畫愛好者來說至少也很方便和有用處。
於是將自己用來寫可見光定位的項目複製一份,修改包名,換個 Logo 和背景圖,然後重新設置了 UI,加了長按保存圖片的功能,最後各種測試和 debug,兩天時間,成功做出了一個穩定的版本,然後將發行版和項目放到了我的碼雲倉庫上。

關鍵部分的代碼:#

保存圖片:#

//長按保存圖片
    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();
            }
        }
    }

刷新媒體庫:#

//刷新媒體庫
    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);
                    }
                });
    }

生成目錄和隨機文件名:#

//隨機文件名
    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 上測試時均可流暢運行,因而目前認為支持現有的幾乎所有的安卓智能手機,對安卓平板是否兼容尚不可知。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。