当前位置: 首页 > news >正文

Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin

Android createScaledBitmap与Canvas通过RectF drawBitmap生成马赛克/高斯模糊(毛玻璃)对比,Kotlin


import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.RectF
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.graphics.toRectclass MainActivity : AppCompatActivity() {private var mScaleFactor = 16f //值越大,马赛克效果越强。private var mSrcBmp: Bitmap? = nullprivate val mResId = R.mipmap.picprivate var mSrcBmpW = 0private var mSrcBmpH = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val image1 = findViewById<ImageView>(R.id.image1)val image2 = findViewById<ImageView>(R.id.image2)mSrcBmp = BitmapFactory.decodeResource(resources, mResId, null)mSrcBmpW = mSrcBmp!!.widthmSrcBmpH = mSrcBmp!!.heightval smallBmp = getSmallBmp(mSrcBmp!!)image1.setImageBitmap(Bitmap.createScaledBitmap(smallBmp, mSrcBmpW, mSrcBmpH, true))image2.setImageBitmap(getScaleBmp(smallBmp))}private fun getSmallBmp(srcBmp: Bitmap): Bitmap {return Bitmap.createScaledBitmap(srcBmp, (mSrcBmpW / mScaleFactor).toInt(), (mSrcBmpH / mScaleFactor).toInt(), true)}private fun getScaleBmp(srcBmp: Bitmap): Bitmap {//空Bitmapval dstBmp = Bitmap.createBitmap(mSrcBmpW, mSrcBmpH, Bitmap.Config.ARGB_8888)val srcRectF = RectF(0f, 0f, srcBmp.width.toFloat(), srcBmp.height.toFloat())val dstRectF = RectF(0f, 0f, mSrcBmpW.toFloat(), mSrcBmpH.toFloat())val c = Canvas(dstBmp)c.drawBitmap(srcBmp, srcRectF.toRect(), dstRectF.toRect(), null)return dstBmp}
}

自上往下,第一张是原图,第二张是通过

    public static Bitmap createScaledBitmap(@NonNull Bitmap src, int dstWidth, int dstHeight,boolean filter)

先把原图缩小1/n,然后再放大到原图等同大小,实现马赛克,发现这种方式生成的Bitmap,肯定可以达到马赛克效果,并基本接近高斯模糊效果。

第三张图是通过Canvas的

    public void drawBitmap(@NonNull Bitmap bitmap, @Nullable Rect src, @NonNull Rect dst,@Nullable Paint paint)

基于RectF放大小图到原图大小,发现马赛克的颗粒度更大,更具备马赛克典型特征。

总结起来,

    public static Bitmap createScaledBitmap(@NonNull Bitmap src, int dstWidth, int dstHeight,boolean filter)

生成的图更平滑。

这种方式生成的图:

    public void drawBitmap(@NonNull Bitmap bitmap, @Nullable Rect src, @NonNull Rect dst,@Nullable Paint paint) 

尤其是放大情况下,拉伸的跨越明显,更具大颗粒度的马赛克效果。

Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)-CSDN博客文章浏览阅读753次,点赞5次,收藏10次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android BitmapShader简洁实现马赛克,Kotlin(一)-CSDN博客。 https://zhangphil.blog.csdn.net/article/details/145322436

http://www.lryc.cn/news/528470.html

相关文章:

  • ThinkPad E480安装Ubuntu 18.04无线网卡驱动
  • 自然语言处理——从原理、经典模型到应用
  • Ollama 运行从 ModelScope 下载的 GGUF 格式的模型
  • Haproxy介绍及学习
  • 【2024年华为OD机试】 (C卷,200分)- 贪心歌手(JavaScriptJava PythonC/C++)
  • 深度学习在金融风控中的应用:突破传统模型的瓶颈
  • LLM - 大模型 ScallingLaws 的指导模型设计与实验环境(PLM) 教程(4)
  • hunyuan 混元学习
  • 开发、科研工具汇总
  • 项目部署(springboot项目)
  • OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境
  • 神经网络的通俗介绍
  • 基于 AWS SageMaker 对 DeepSeek-R1-Distilled-Llama-8B 模型的精调与实践
  • 如何使用DeepSeek R1
  • 大屏 UI 设计风格的未来趋势
  • unity学习22:Application类其他功能
  • 51单片机入门_02_C语言基础0102
  • 定位的叠放次序 z-index
  • ESP32-S3模组上跑通esp32-camera(36)
  • 前端性能优化:HMR热更新和预获取加载
  • 【自学笔记】计算机网络的重点知识点-持续更新
  • 算法基础学习——二分查找(附带Java模板)
  • 【llm对话系统】大模型源码分析之llama模型的long context更长上下文支持
  • 单片机基础模块学习——NE555芯片
  • Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)
  • 最优化问题 - 内点法
  • vim交换文件的工作原理
  • CISCO路由基础全集
  • 网络直播时代的营销新策略:基于受众分析与开源AI智能名片2+1链动模式S2B2C商城小程序源码的探索
  • 2024年终总结——今年是蜕变的一年