android获取surfaceview图片_Android字符串相机

本文介绍了如何在Android中将相机SurfaceView的图片转换为ASCII字符艺术。通过相机预览、RGB和YUV转换算法,以及利用ImageReader高效获取图像数据,最后展示在TextView上。详细代码实现和Github项目链接提供。
摘要由CSDN通过智能技术生成

876b090919e54a7e56733907aef05f2a.png

本文已获得作者授权,原文作者:rome753
原文链接:https://www.jianshu.com/p/8fd1f0f8a5f1

很早就看到过这种场景,用字符来展示图片甚至播放视频,可以说是黑客炫(zhuang)技(b)神器。当然有了一定的技术之后,就明白其实实现挺简单。

相机预览

首先是相机预览的实现,因为不是这里的重点,所以直接在Github上找到成熟的代码。

Google官方的Demo当然是最好的:

https://github.com/googlesamples/android-Camera2Basic

这个项目演示了Camera2 API的基本使用,并在一个TextureView上展示了相机实时画面。

转换算法一(RGB转换)

有了TextureView,就能通过getBitmap()方法拿到bitmap,接下来就是把bitmap转换成字符串,相关算法这里有一份:

https://github.com/idevelop/ascii-camera/blob/master/script/ascii.js

虽然是JavaScript的,但是简单看一下就知道原理:

  1. 把bitmap中像素点的RGB值转换成灰度

  2. 用一个字符数组表示不同的灰度,如ascii字符串" .,:;i1tfLCG08@",越往后表示灰度越高,也就是颜色越深。当然也可以中文" 一十大木本米菜数簇龍龘"。

  3. 采样像素点灰度转换成字符,每行成一个字符串,不同行用换行符连接成一个总的字符串,展示到TextView上。

算法 Utils.java:

 1public class Utils {
    
2
3    public static void startConvert(final TextureView textureView, final TextView textView) {
4        Handler handler = new Handler(){
5            @Override
6            public void handleMessage(Message msg) {
7                if(textureView != null) {
8              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值