Android简洁缩放Matrix实现图像马赛克,Kotlin

server/2024/12/27 22:39:41/

Android简洁缩放Matrix实现图像马赛克,Kotlin

 

原理,通过Matrix把一个原图缩小到原先的1/n,然后再把缩小后的小图放大n倍,自然就是马赛克效果(相当于是放大后像素“糊”成一片了)。

 

 

import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Matrix
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageViewclass MyView : AppCompatImageView {private var WIDTH = 0private var HEIGHT = 0private var mBmpDst: Bitmapprivate var mBmpSrc: Bitmapprivate var mScaleFator = 10f //这个值越大,马赛克效果越强烈。constructor(ctx: Context, attributeSet: AttributeSet) : super(ctx, attributeSet) {//WIDTH = resources.displayMetrics.widthPixels//HEIGHT = resources.displayMetrics.heightPixelsmBmpSrc = BitmapFactory.decodeResource(resources, R.mipmap.pic, null)WIDTH = mBmpSrc.widthHEIGHT = mBmpSrc.height//空BitmapmBmpDst = Bitmap.createBitmap((WIDTH / mScaleFator).toInt(), (HEIGHT / mScaleFator).toInt(), Bitmap.Config.ARGB_8888)val c = Canvas(mBmpDst)val mtx = Matrix()mtx.setScale(1 / mScaleFator, 1 / mScaleFator)c.drawBitmap(mBmpSrc, mtx, null)}override fun onDraw(canvas: Canvas) {val mtx = Matrix()mtx.setScale(mScaleFator, mScaleFator)canvas.drawBitmap(mBmpDst, mtx, null)}
}

 

 

 

原图:

0e3e69de7891438e93bbf878bc70f0ca.jpeg

 

马赛克处理后:

dade43b210854570922819753b866764.png

注意,这是对全图施加马赛克效果。

 

 

 

Android图形图像处理:马赛克(Mosaic)效果_android对图片部分区域做马赛克-CSDN博客文章浏览阅读6k次。以图形图像界经典的实验例图Lenna为例,当手指在图片上滑过后,形成马赛克的: 写一个MosaicView继承自AppCompatImageView:package com.zhangphil;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Can..._android对图片部分区域做马赛克https://blog.csdn.net/zhangphil/article/details/87812785

 


http://www.ppmy.cn/server/153378.html

相关文章

React State(状态)

React State(状态) 引言 在React的世界里,状态(State)是一个核心概念,它允许我们创建动态和交互式的用户界面。状态是React组件内部数据的存储机制,当状态发生变化时,React会自动重新渲染组件&#xff0c…

RabbitMQ概述

目录 RabbitMQ概述 前言 MQ MQ的作用 为什么选择RabbitMQ RabbitMQ的介绍 RabbitMQ概述 前言 Rabbit, 兔⼦的意思 互联⽹⾏业很多公司, 都喜欢⽤动物命名产品, 或者作为公司的logo, 吉祥物. ⽐如: 腾讯的企鹅, 京东的狗, 美团的袋⿏, 携程的海豚,阿⾥就更多了, 蚂蚁, ⻜…

解决需要用到1.x版本的tensorflow环境的问题

实在不行,组个tensorflow的服务器吧,方便! 是tensorflow环境下运行的,因此需要配置tensorflow环境。 首先在linux服务器上安装anoconda,可以直接下载.sh安装包,然后上传到服务器,使用bash Anxxx.sh,执行安装命令 安装好之后创建一个新的虚拟环境,注意Python版本的选…

vue3 Proxy替换vue2 defineProperty的原因

在 Vue 3 中,响应式系统选择使用 Proxy 代替 Vue 2 中的 Object.defineProperty,主要是因为 Proxy 提供了更强大、更灵活的能力,可以解决 Vue 2 中使用 Object.defineProperty 的一些局限性和性能问题。 以下是详细的原因和对比:…

uniapp 基于xgplayer(西瓜视频) + renderjs开发,实现APP视频播放

背景:在uniapp中因原生video组件功能有限,选择引入xgplayer库来展示视频播放等功能。并且APP端无法操作dom,所以使用了renderjs。 其他的不多说,主要列举一下renderjs中需要注意的点: 1、使用:在标签后&…

curl发起带参数的请求

要使用 curl 发起一个带有 application/json 类型参数的请求,你可以使用 -H 选项来设置请求头,并使用 -d 或 --data 选项来传递 JSON 数据。以下是一个示例: 示例:POST 请求 假设你要向 https://example.com/api 发送一个 POST …

分布式系统架构2:服务发现

1.概念 服务发现指的是分布式系统中,服务实例动态注册自己的信息到注册中心,其他服务能发现这些实例的位置,实现服务间通信。 为什么需要服务发现? 对于分布式应用来说,服务发现不是可选项,而是必须的。主要…

C++进阶-1-单继承、多继承、虚继承

C单继承详解 1. 基础概念 继承是面向对象编程中的一个核心概念,允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。单继承意味着一个类只能直接继承一个父类。这种简单的结构在许多情况下是足够的&…