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

server/2025/1/30 8:01:50/

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.ppmy.cn/server/163450.html

相关文章

蓝桥杯例题一

不管遇到多大的困难&#xff0c;我们都要坚持下去。每一次挫折都是我们成长的机会&#xff0c;每一次失败都是我们前进的动力。路漫漫其修远兮&#xff0c;吾将上下而求索。只有不断努力奋斗&#xff0c;才能追逐到自己的梦想。不要害怕失败&#xff0c;害怕的是不敢去尝试。只…

【Linux基础指令】第三期

近期更新的基础指令链接&#xff1a; 【Linux基础指令】第一期-CSDN博客 【Linux基础指令】第二期-CSDN博客 本期博客的主题依旧是 "基础指令" &#xff1b;话不多说&#xff0c;正文开始。 一、Linux的指令 1.zip / unzip 功能&#xff1a;打包压缩 命令格式&…

一文大白话讲清楚webpack基本使用——16——图片压缩

文章目录 一文大白话讲清楚webpack基本使用——16——图片压缩1. 建议按文章顺序从头看&#xff0c;一看到底&#xff0c;豁然开朗2. 为啥要压缩图片3. 怎么压缩4. image-webpack-loader压缩原理 一文大白话讲清楚webpack基本使用——16——图片压缩 1. 建议按文章顺序从头看&…

Android Studio 新版本24.2.2 运行后自动切到 LogCat

最近更新了 Android studio 版本&#xff0c;发现有个问题&#xff1a; 每次 Run app 之后。都会自动切换到 run 标签。这让我非常不习惯。我个人习惯在app 运行后查看Logcat 最后靠 deepSeek 找到一种解决方案&#xff1a; Android Studio 中截图如下&#xff1a;

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.20 极值追踪:高效获取数据特征的秘诀

1.20 极值追踪&#xff1a;高效获取数据特征的秘诀 1.20.1 目录 #mermaid-svg-RBxy2YCCN23ydzFu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-RBxy2YCCN23ydzFu .error-icon{fill:#552222;}#mermaid-svg-RBxy2YC…

使用 Python 和 Tesseract 实现验证码识别

验证码识别是一个常见且实用的技术需求&#xff0c;尤其是在自动化测试和数据采集场景中。通过开源 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;工具 Tesseract&#xff0c;结合 Python 的强大生态&#xff0c;我们可以高效实现验证码识…

从Stargate看全球科技变局与中国IT互联网的破局之路

从Stargate看全球科技变局与中国IT互联网的破局之路 科技新势力:Stargate 的诞生 在科技发展的长河中,每一次巨头间的携手都宛如一颗投入湖面的巨石,激起千层浪。软银、NVIDIA、Oracle 共同组建 Stargate 公司这一事件,无疑是 AI 领域的一场 “超级风暴”。美国当地时间 2025…

【故障诊断】量子粒子群优化极限学习机实现乳腺癌诊断,(QPSO-ELM)数据分类

1.简介 本文采用量子粒子群优化极限学习机实现乳腺癌诊断&#xff0c;极限学习机&#xff08;ELM&#xff09;用来训练单隐藏层前馈神经网络&#xff08;SLFN&#xff09;与传统的SLFN训练算法不同&#xff0c;极限学习机随机选取输入层权重和隐藏层偏置&#xff0c;输出层权重…