递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 2491|回复: 3
打印 上一主题 下一主题

[安卓] 安卓图片转玻璃效果算法

[复制链接]

109

主题

460

帖子

2467

积分

金牌会员

Rank: 6Rank: 6

积分
2467
跳转到指定楼层
楼主
发表于 2023-11-4 18:08:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
效果图







<火山程序 类型 = "通常" 版本 = 1 />

方法 玻璃效果图 <公开 静态 类型 = 可绘制对象类 折叠 折叠2
        @java.导入 = "android.content.Context\n android.graphics.Bitmap\n android.graphics.BitmapFactory\n android.graphics.Canvas\n android.graphics.drawable.BitmapDrawable\nandroid.graphics.drawable.Drawable\n android.renderscript.Allocation\nandroid.renderscript.Element\n android.renderscript.RenderScript\nandroid.renderscript.ScriptIntrinsicBlur"
        @禁止流程检查 = 真>
参数 欲窗口 <类型 = 安卓窗口>
参数 图片路径 <类型 = 文本型>
{
    变量 位图 <参考 类型 = 位图类>
    位图 = 可绘制对象类转位图类 (外部图像转可绘制对象类 (欲窗口, 图片路径))
    // 创建一个与输入 Bitmap 相同大小的输出 Bitmap
    @ Bitmap outputBitmap = Bitmap.createBitmap(@<位图>.getWidth(), @<位图>.getHeight(), Bitmap.Config.ARGB_8888);
    // 创建 RenderScript 对象
    @ RenderScript rs = RenderScript.create(@<欲窗口>);
    // 创建 Allocation 对象
    @ Allocation inputAllocation = Allocation.createFromBitmap(rs, @<位图>);
    @ Allocation outputAllocation = Allocation.createFromBitmap(rs, outputBitmap);
    // 创建 ScriptIntrinsicBlur 对象
    @ ScriptIntrinsicBlur scriptBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    // 设置模糊半径
    // @ scriptBlur.setRadius(10f);
    @ scriptBlur.setRadius(24f);//模糊效果
    // 应用模糊效果
    @ scriptBlur.setInput(inputAllocation);
    @ scriptBlur.forEach(outputAllocation);
    // 将输出数据保存到输出 Bitmap
    @ outputAllocation.copyTo(outputBitmap);
    // 销毁 RenderScript 对象
    @ rs.destroy();
    // 将 Bitmap 转换为 Drawable
    变量 位图可绘制对象 <参考 类型 = 位图可绘制对象类>
    变量 位图2 <参考 类型 = 位图类>
    @ @<位图可绘制对象>=new BitmapDrawable(@<欲窗口>.getResources(), outputBitmap);
    位图2 = 位图可绘制对象.取位图 ()
    返回 (位图到可绘对象类 (位图2))
}

方法 位图到可绘对象类 <公开 静态 类型 = 可绘制对象类 折叠>
参数 位图 <类型 = 位图类>
{
    返回 ((可绘制对象类)位图可绘制对象类.从位图创建 (位图))
}

方法 可绘制对象类转位图类 <公开 静态 类型 = 位图类 注释 = "从可绘制对象类创建位图对象" 返回值注释 = "返回创建后的位图,失败返回空对象。" 折叠>
参数 可绘制对象 <类型 = 可绘制对象类 注释 = "提供可绘制对象类">
{
    如果 (可绘制对象 属于 位图可绘制对象类)
    {
        返回 (((位图可绘制对象类)可绘制对象).取位图 ())
    }
    否则 (可绘制对象 属于 图像加载可绘制对象类)
    {
        返回 (((图像加载可绘制对象类)可绘制对象).取位图 ())
    }
    否则
    {
        返回 (空对象)
    }
}

方法 外部图像转可绘制对象类 <公开 静态 类型 = 可绘制对象类 折叠>
参数 欲窗口 <类型 = 安卓窗口>
参数 文件路径 <类型 = 文本型>
参数 临时图片 <类型 = 图片框 注释 = "忽略即可" @默认值 = 空对象>
{
    临时图片 = 欲窗口.创建窗口组件 (图片框, )
    临时图片.置图片数据 (读入文件 (文件路径))
    返回 (临时图片.取图片 ())
}


回复

使用道具 举报

31

主题

120

帖子

2520

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2520
沙发
发表于 2023-11-4 19:01:46 | 只看该作者
opencv有高斯模糊,仅需一行代码搞定
西天守护神
回复

使用道具 举报

109

主题

460

帖子

2467

积分

金牌会员

Rank: 6Rank: 6

积分
2467
板凳
 楼主| 发表于 2023-11-5 08:52:21 | 只看该作者
qqqkoko123 发表于 2023-11-4 19:01
opencv有高斯模糊,仅需一行代码搞定

一个小东西带几十MB的库,说不去啊.
回复

使用道具 举报

31

主题

120

帖子

2520

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2520
地板
发表于 2023-11-16 20:16:26 | 只看该作者
ゞ情非得已Sky 发表于 2023-11-5 08:52
一个小东西带几十MB的库,说不去啊.

小软件没有生存力,肯定是要做大做强的
西天守护神
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 02:06 , Processed in 0.092819 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表