1,2,线稿!

  1. 1. 关键部分的代码:
    1. 1.1. 保存图片:
    2. 1.2. 刷新媒体库:
    3. 1.3. 生成目录和随机文件名:

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

最近在写OpenCV在Android上用于可见光定位的APP,在轮廓识别的时候偶然用手机里的二次元图片作为样本进行测试,发现线条十分明显,就像下面这张图这样:
转换结果
这不就是线稿吗,或许可以写一个一键将图片转成线稿的APP,万一以后用得到呢。而且对于绘画爱好者来说至少也很方便和有用处。
于是将自己用来写可见光定位的项目复制一份,修改包名,换个Logo和背景图,然后重新设置了UI,加了长按保存图片的功能,最后各种测试和debug,两天时间,成功做出了一个稳定的版本,然后将发行版和项目放到了我的码云仓库上。

关键部分的代码:

保存图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//长按保存图片
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();
}
}
}

刷新媒体库:

1
2
3
4
5
6
7
8
9
10
11
12
//刷新媒体库
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);
}
});
}

生成目录和随机文件名:

1
2
3
4
5
6
7
8
9
10
//随机文件名
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上测试时均可流畅运行,因而目前认为支持现有的几乎所有的安卓智能手机,对安卓平板是否兼容尚不可知。