作为一个自主开发者,我一直对鸿蒙系统充满好奇和兴趣,尤其是它那独特的生态系统和技术架构。最近,我给自己定了一个小目标:开发一个带有特效的相机App。这不仅仅是为了学点新东西,也是为了挑战自己,看看能不能用鸿蒙系统实现一些炫酷的视觉效果。

在研究鸿蒙的开发文档时,我发现了一个非常有趣的API:EffectKit。它是一个专门用来处理视觉特效的工具,可以帮我在应用中实现各种滤镜和特效效果,看起来非常适合我想要做的东西。于是,我决定用这个API作为我的开发起点,开始了这段充满学习和挑战的开发之旅。

初次尝试:用EffectKit添加滤镜

开发特效相机App的第一步,就是给相机画面添加一些滤镜效果。这个功能既是特效相机的核心亮点,也是一个很好的练手点。于是,我在鸿蒙的官方文档中翻阅,找到了如何使用EffectKit来添加视觉效果的部分。

我首先按照文档的指引,使用EffectKit来创建一个简单的滤镜效果。以下是我最初的代码:

import EffectKit from '@ohos.effect.EffectKit';

let effectKit = new EffectKit();

function applyFilter() {
    effectKit.createEffect({
        effectType: 'FILTER_SEPIA', // 添加怀旧滤镜效果
    }).then((effect) => {
        console.log('滤镜创建成功');
        // 将滤镜应用到相机预览中
        effect.applyToCameraPreview('cameraPreviewId');
    }).catch((err) => {
        console.error('滤镜创建失败', err);
    });
}

这段代码的目的是为相机预览画面添加一个怀旧滤镜效果。刚开始运行的时候,我发现滤镜效果并没有像预期的那样呈现。为了找出原因,我又仔细阅读了文档,终于意识到是因为在初始化EffectKit的时候,没有正确配置相机权限。

权限问题:总绕不过去的坑

为了让特效正常应用到相机画面上,首先需要确保应用有访问相机的权限。这是所有移动开发中的一个重要步骤,也是为了用户隐私和数据安全考虑。根据文档,我在config.json中添加了对相机的权限声明,代码如下:

"reqPermissions": [
    {
        "name": "ohos.permission.CAMERA"
    }
]

有了权限声明之后,我还需要在应用启动的时候,动态地请求相机权限,以确保用户允许我们访问他们的设备相机。

import { Permissions } from '@ohos.permissions';

function requestCameraPermission() {
    Permissions.requestPermission('ohos.permission.CAMERA').then((result) => {
        if (result.granted) {
            console.log('相机权限已授予');
            applyFilter();
        } else {
            console.error('相机权限被拒绝');
        }
    }).catch((err) => {
        console.error('请求相机权限失败', err);
    });
}

这样,在确保获取相机权限后,我成功运行了这段代码,并终于看到了相机画面上的怀旧滤镜效果。这一刻真的让我感觉自己距离目标更近了一步。

进阶挑战:添加实时美颜效果

实现滤镜效果之后,我决定再挑战一下自己:实现一个实时美颜效果。鸿蒙的EffectKit不仅支持简单的滤镜,还可以用来进行复杂的视觉处理,比如人脸检测和美颜处理。

image.png

为了实现这个功能,我决定使用EffectKit的美颜特效功能。在文档中,我找到了如何创建美颜特效的相关说明,于是尝试了以下代码:

function applyBeautyEffect() {
    effectKit.createEffect({
        effectType: 'BEAUTY_FACE', // 添加美颜效果
    }).then((effect) => {
        console.log('美颜效果创建成功');
        // 将美颜效果应用到相机预览中
        effect.applyToCameraPreview('cameraPreviewId');
    }).catch((err) => {
        console.error('美颜效果创建失败', err);
    });
}

这段代码成功地为相机画面添加了实时美颜效果,用户可以看到自己在相机中的画面经过处理后更加光滑和自然。这让我对EffectKit的强大功能有了更深的认识,也更有信心继续开发下去。

多个特效叠加:让相机效果更加炫酷

在实现了基础的滤镜和美颜效果之后,我开始思考如何让这个相机App变得更加有趣。于是,我决定尝试在相机预览中叠加多个特效,这样用户可以同时看到不同特效的组合效果。

为了实现这个功能,我对EffectKit的API进行了进一步的研究,并尝试了以下代码:

function applyMultipleEffects() {
    effectKit.createEffect({
        effectType: 'FILTER_SEPIA', // 怀旧滤镜
    }).then((sepiaEffect) => {
        console.log('怀旧滤镜创建成功');
        sepiaEffect.applyToCameraPreview('cameraPreviewId');

        // 创建美颜效果并叠加
        return effectKit.createEffect({
            effectType: 'BEAUTY_FACE',
        });
    }).then((beautyEffect) => {
        console.log('美颜效果创建成功');
        beautyEffect.applyToCameraPreview('cameraPreviewId');
    }).catch((err) => {
        console.error('创建叠加特效失败', err);
    });
}

通过这段代码,我成功地在相机预览中叠加了怀旧滤镜和美颜效果。用户可以在屏幕上看到经过多重处理的画面,这种效果比单一的滤镜或美颜更加有趣,也更具吸引力。

遇到的挑战和收获

开发这个特效相机App的过程中,我遇到了不少挑战。首先是对鸿蒙系统的陌生,我不得不花时间去学习它的开发框架和权限管理机制。其次,像EffectKit这样的工具虽然功能强大,但在实际使用中依然会有很多细节需要去理解和调试。比如,如何正确初始化、如何处理不同设备的兼容性,这些问题都让我在开发过程中不断地学习和调整。

此外,在叠加多个特效的时候,我遇到了性能方面的挑战。有时候,在低性能的设备上,多个特效的叠加会导致画面卡顿或延迟。我通过调整特效的参数,并适当减少特效的复杂度,最终找到了性能和效果之间的平衡。这让我对移动设备的性能优化有了更深入的理解,也让我意识到在开发过程中要始终关注用户体验。

但正是这些挑战,让我对鸿蒙系统有了更深入的理解,也积累了很多关于移动开发的经验。通过反复查阅文档和不断调试代码,我不仅成功实现了滤镜和美颜效果,还对如何利用鸿蒙的API来实现更多功能有了新的想法。

未来的展望

虽然这个特效相机App的功能还比较基础,但它为我打开了一扇新世界的大门。接下来,我计划继续完善这个应用,比如添加更多的滤镜类型、支持用户选择自己喜欢的特效,甚至尝试一些更加复杂的视觉效果,比如实时背景替换。

我还想添加一个特效商店的功能,让用户可以从网上下载更多的滤镜和特效。这样不仅可以丰富App的功能,还能增加用户的互动性和趣味性。另外,我还想尝试将一些AI技术与EffectKit结合,比如通过机器学习来实现更智能的美颜效果,或者让App能够自动识别用户的场景,并推荐最佳的特效。

当然希望一起学习的同学可以来个关注,一起交流进步~!
image.png


郝敬学
416 声望94 粉丝