递归火山软件开发平台

标题: 安卓图片转玻璃效果算法 [打印本页]

作者: ゞ情非得已Sky    时间: 2023-11-4 18:08
标题: 安卓图片转玻璃效果算法
效果图

(, 下载次数: 33)



(, 下载次数: 29)

<火山程序 类型 = "通常" 版本 = 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))
}

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

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

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



作者: qqqkoko123    时间: 2023-11-4 19:01
opencv有高斯模糊,仅需一行代码搞定
作者: ゞ情非得已Sky    时间: 2023-11-5 08:52
qqqkoko123 发表于 2023-11-4 19:01
opencv有高斯模糊,仅需一行代码搞定

一个小东西带几十MB的库,说不去啊.
作者: qqqkoko123    时间: 2023-11-16 20:16
ゞ情非得已Sky 发表于 2023-11-5 08:52
一个小东西带几十MB的库,说不去啊.

小软件没有生存力,肯定是要做大做强的




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4