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

Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放,Kotlin

Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放,Kotlin

 

class MyImageView : AppCompatImageView {private var mSrcBmp: Bitmap? = nullprivate var testIV: ImageView? = nullconstructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {//mSrcBmp是原始图大小,没有缩放和拉伸的。mSrcBmp = (drawable as BitmapDrawable).bitmap}fun setTestImageView(imageView: ImageView) {testIV = imageView}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val bmp = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)val c = Canvas(bmp)c.drawColor(Color.BLUE)c.drawBitmap(mSrcBmp!!, 0f, 0f, null)testIV?.setImageBitmap(bmp)}
}

 

不加任何缩放,直接绘制原图放在下面的ImageView里面则是:

329aac39f43b4457867fa3b0e24afc64.png

下图左上角即是未缩放的原图,直接绘制在下面的ImageView里面。

如果想把原始小图拉伸撑满整个ImageView,可以用常规、经典的Bitmap.createScaledBitmap拉伸原始图的宽高为ImageView的宽高实现,也可以基于矩阵Matrix,通过setRectToRect实现同样的拉伸缩放目标:

class MyImageView : AppCompatImageView {private var mSrcBmp: Bitmap? = nullprivate var testIV: ImageView? = nullconstructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs) {//mSrcBmp是原始图大小,没有缩放和拉伸的。mSrcBmp = (drawable as BitmapDrawable).bitmap}fun setTestImageView(imageView: ImageView) {testIV = imageView}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)val bmp = Bitmap.createBitmap(this.width, this.height, Bitmap.Config.ARGB_8888)val c = Canvas(bmp)c.drawColor(Color.BLUE)val src = RectF(0f, 0f, mSrcBmp?.width!!.toFloat(), mSrcBmp?.height!!.toFloat())val dst = RectF(0f, 0f, this.width.toFloat(), this.height.toFloat())val mx = Matrix()mx.setRectToRect(src, dst, Matrix.ScaleToFit.CENTER)c.drawBitmap(mSrcBmp!!, mx, null)testIV?.setImageBitmap(bmp)}
}

运行如下图:

4527f0cdb45a4032a39a3743990b5ec6.png

上下两张图相同。

 

 

Android矩阵Matrix变换setRectToRect,Kotlin-CSDN博客文章浏览阅读194次,点赞2次,收藏2次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。基础上,把剪切的区域从矩形Rect变为圆形的Path,当手指在上面的ImageView移动时候,下面同等大小对应的坐标区域显示“剪切”出来的圆形图。https://blog.csdn.net/zhangphil/article/details/135913218

 

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

相关文章:

  • TensorFlow2实战-系列教程11:RNN文本分类3
  • 故障诊断 | 一文解决,RF随机森林的故障诊断(Matlab)
  • DAO设计模式
  • 【Midjourney】新手指南:参数设置
  • 阿里云a10GPU,centos7,cuda11.2环境配置
  • RTSP/Onvif协议视频平台EasyNVR激活码授权异常该如何解决
  • React16源码: React中event事件对象的创建过程源码实现
  • 深度学习(12)--Mnist分类任务
  • AI工具【OCR 01】Java可使用的OCR工具Tess4J使用举例(身份证信息识别核心代码及信息提取方法分享)
  • 【MySQL复制】半同步复制
  • PHP面试知识点--echo、print、print_r、var_dump区别
  • centos 7 部署若依前后端分离项目
  • RFID手持终端_智能pda手持终端设备定制方案
  • 51单片机学习——矩阵按键
  • 重写Sylar基于协程的服务器(1、日志模块的架构)
  • ElementUI Form:Radio 单选框
  • react-activation实现缓存,且部分页面刷新缓存,清除缓存
  • idea 中 tomcat 乱码问题修复
  • Modbus协议学习第七篇之libmodbus库API介绍(modbus_write_bits等)
  • 第九节HarmonyOS 常用基础组件13-TimePicker
  • 力扣刷题-55.跳跃游戏
  • Ruby安装演示教程
  • 前端使用vue-simple-uploader进行分片上传
  • Java 源代码中常见的数据类型
  • Web3行业研究逐步加强,“链上数据”缘何成为关注焦点?
  • 逸学区块链【solidity】真随机数
  • 【WPF.NET开发】优化性能:对象行为
  • uniapp中封装一个svg转base64的组件
  • QT播放gstreamer命令(三)---使用QMediaPlayer
  • Ubuntu22扩大分区