原生鸿蒙JavaApi无法实现图片镜像的一个解决方案

前言

最近在做鸿蒙原生APP的开发,过程中遇到一个很蛋疼的问题,其提供的Api没有办法做到对图片进行镜像处理。在网上搜了一波,并没有找到有关的解决方案,最接近的也仅仅是利用canvas在展示的时候进行镜像,并不能满足我的需求

由于我项目中需要镜像的图片是byte[]格式的比特流,我一开始想着直接解析比特流自己做镜像,但是在搜索资料的过程中发现使用Android SDK的Api可以很容易实现图片的镜像,于是乎我产生了将Android SDK提供的jar包放到工程中调用Android Api的想法

在鸿蒙项目中添加Android依赖

首先我们下个Android Studio,在其中配置好Android的SDK(没有找到直接下SDK的方法),然后在对应文件夹把android.jar文件复制到鸿蒙项目的libs目录下

然后修改entry gradle的配置文件build.gradle

dependencies {
    // implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])    // 原来的配置
    compileOnlyfileTree(dir:'libs', include: ['*.jar', '*.har'])  // 更改后
    testImplementation'junit:junit:4.13.1'
    ohosTestImplementation'com.huawei.ohos.testkit:runner:2.0.0.400'
}

修改的目的在于不要将整个jar包打包到应用中去,减小冗余

然后我们重新构建一下项目,就可以愉快的在原生鸿蒙应用中使用Android的Api了

图片镜像安卓实现

/**
* 使用Android的api对图片进行处理
*/
publicclassImageUtil {
    /**
     * 图片的比特流转Bitmap
     * @param bytes 图片源比特流
     * @return 图片的Bitmap
     */
    publicstaticBitmapbyte2Bitmap(byte[] bytes) {
        returnBitmapFactory.decodeByteArray(bytes, 0, bytes.length);
    }
​
    /**
     * 将Bitmap保存到文件
     * @param bmp
     * @param file 保存文件位置
     */
    publicstaticvoidBitmapSave(Bitmapbmp, Filefile) {
        FileOutputStreamout=null;
        try {
            out=newFileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        } catch (IOExceptione) {
            e.printStackTrace();
        }
    }
​
    /**
     * 对Bitmap进行水平镜像
     *
     * @param bmp 原图Bitmap
     * @return 镜像后的Bitmap
     */
    publicstaticBitmapmirror(Bitmapbmp) {
        inth=bmp.getHeight();
        intw=bmp.getWidth();
        Matrixmatrix=newMatrix();
        matrix.postScale(-1f, 1f); // 水平镜像翻转
        returnBitmap.createBitmap(bmp, 0, 0, w, h, matrix, true);
    }
​
    /**
     * 对Bitmap进行指定角度的旋转
     * @param bmp 原图Bitmap
     * @param degree 旋转角度,顺时针
     * @return 旋转后的Bitmap
     */
    publicstaticBitmaprotate(Bitmapbmp, floatdegree) {
        inth=bmp.getHeight();
        intw=bmp.getWidth();
        Matrixmatrix=newMatrix();
        matrix.postRotate(degree); // 旋转指定角度
        returnBitmap.createBitmap(bmp, 0, 0, w, h, matrix, true);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值