Android ContentResolver.loadThumbnail转Kotlin

Android ContentResolver.loadThumbnail转Kotlin

loadThumbnail原先是Java实现的,现在抠出来转Kotlin实现。

    private fun loadThumbnail(uri: Uri, size: Size, signal: CancellationSignal): Bitmap {return myLoadThumbnail(mContext?.contentResolver!!, uri, size, signal, ImageDecoder.ALLOCATOR_SOFTWARE)}private fun myLoadThumbnail(cr: ContentResolver, uri: Uri, size: Size, signal: CancellationSignal, allocator: Int): Bitmap {val opts = Bundle()opts.putParcelable(ContentResolver.EXTRA_SIZE, Point(size.width, size.height))val orientation = Int64Ref(0)var bitmap = ImageDecoder.decodeBitmap(ImageDecoder.createSource {val afd: AssetFileDescriptor = cr.openTypedAssetFile(uri, "image/*", opts,signal)!!val extras = afd.extrasorientation.value = (extras?.getInt(DocumentsContract.EXTRA_ORIENTATION, 0) ?: 0).toLong()afd}) { decoder: ImageDecoder, info: ImageInfo, source: ImageDecoder.Source? ->decoder.allocator = allocator// One last-ditch check to see if we've been canceled.if (signal != null) signal.throwIfCanceled()// We requested a rough thumbnail size, but the remote size may have// returned something giant, so defensively scale down as needed.val widthSample = info.size.width / size.widthval heightSample = info.size.height / size.heightval sample = Math.max(widthSample, heightSample)if (sample > 1) {decoder.setTargetSampleSize(sample)}}// Transform the bitmap if requested. We use a side-channel to// communicate the orientation, since EXIF thumbnails don't contain// the rotation flags of the original image.// Transform the bitmap if requested. We use a side-channel to// communicate the orientation, since EXIF thumbnails don't contain// the rotation flags of the original image.if (orientation.value != 0L) {val width = bitmap.widthval height = bitmap.heightval m = Matrix()m.setRotate(orientation.value.toFloat(), (width / 2).toFloat(), (height / 2).toFloat())bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, m, false)}return bitmap}

或者:

    private fun loadThumbnail(uri: Uri, size: Size, signal: CancellationSignal): Bitmap {return myLoadThumbnail(mContext?.contentResolver!!, uri, size, signal, ImageDecoder.ALLOCATOR_SOFTWARE)}private fun myLoadThumbnail(cr: ContentResolver, uri: Uri, size: Size, signal: CancellationSignal, allocator: Int): Bitmap {val opts = Bundle()opts.putParcelable(ContentResolver.EXTRA_SIZE, Point(size.width, size.height))val orientation = Int64Ref(0)val afd: AssetFileDescriptor = cr.openTypedAssetFile(uri, "image/*", opts,signal)!!val src = ImageDecoder.createSource {val extras = afd.extrasorientation.value = (extras?.getInt(DocumentsContract.EXTRA_ORIENTATION, 0) ?: 0).toLong()afd}var bmp = ImageDecoder.decodeBitmap(src, ImageDecoder.OnHeaderDecodedListener { decoder, info, source ->decoder.allocator = allocatorval widthSample = info.size.width / size.widthval heightSample = info.size.height / size.heightval sample = Math.max(widthSample, heightSample)if (sample > 1) {decoder.setTargetSampleSize(sample)}})if (orientation.value != 0L) {val width = bmp.widthval height = bmp.heightval m = Matrix()m.setRotate(orientation.value.toFloat(), (width / 2).toFloat(), (height / 2).toFloat())bmp = Bitmap.createBitmap(bmp, 0, 0, width, height, m, false)}return bmp}

Android loadThumbnail ThumbnailUtils.createVideoThumbnail MediaMetadataRetriever time cost, Kotlin_android resolver.loadthumbnail()-CSDN博客文章浏览阅读712次,点赞21次,收藏12次。Android设置头像,手机拍照或从本地相册选取图片作为头像_android 头像拍照_zhangphil的博客-CSDN博客。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。_android resolver.loadthumbnail()https://blog.csdn.net/zhangphil/article/details/139985203

Android loadThumbnail ThumbnailUtils.createImageThumbnail BitmapFactory.decodeFile time cost, Kotlin-CSDN博客文章浏览阅读776次,点赞16次,收藏12次。从很小的宽高开始,不断迭代增加setRectToRect的目标RectF的宽高,每次迭代加上一定时延,实现Matrix基础上的动画。【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用户的头像是从服务器端读出的一个普通矩形图片,但是现在的设计一般要求在APP端的用户头像显示成圆形头像,那么此时虽然Glide可以加载,但加载出来的是一个矩形,如果要Glide_android 毛玻璃圆角。_loadthumbnailhttps://blog.csdn.net/zhangphil/article/details/139962276

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1485945.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

『 Linux 』信号概念与信号的产生

文章目录 信号概念前台进程与后台进程信号的本质硬件理解信号的产生 信号概念 "信号"一词指用来传达信息或只是的各种形式的提示或标志; 在生活中常见的信号例如红绿灯,交通标志,短信通知等 在操作系统中,"信号"是一种用于异步通知进程发生特定事件的机制;…

DevExpress中文教程 - 如何在.NET MAUI应用中实现Material Design 3?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 获取DevExpress v24.1正式版下载 Material Design是一个由Google开发的跨平台指南系统…

MySQL_CRUD

目录 一、新增 (Create) 1.1 全列插入 1.2 指定列插入 二、查询 (Retrieve) 2.1 全列查询 2.2 指定列查询 2.3 查询字段为表达式 2.4 别名 2.5 去重:distinct 2.6 排序:order by 2.7 条件查询:where 2.8 分页查询:lim…

安装Ubuntu24.04服务器版本

Ubuntu系统安装 一.启动安装程序二.执行 Ubuntu Server 安装向导1.选择安装程序语言,通常选择「English」2.设置键盘布局,默认「English US」即可3.选择安装方式 三.配置网络1.按Tab键选择网络接口(例如 ens160),然后按…

项目实战二 HIS项目

目标: 项目的操作流程: 开发体系 前端开发:负责页面的编写 HTML CSS JavaScript 后端开发:看不到 摸不着的功能 常用开发语言 PHP JAVA Python 框架 : 半成品 做好的功能模块 版本控制 Git 分布式版本控…

乐理基础知识

为了学习无源蜂鸣器播放音乐,我去学习了乐理知识,发现只要把握了音调和音值,也不算太难,我整理了笔记,现在分享出来 声音 声音是由物体振动产生的声波。 其主要特征如下: 1.音调指声音的高低&#xff0…

数据编织 VS 数据仓库 VS 数据湖

目录 1. 什么是数据编织?2. 数据编织的工作原理3. 代码示例4. 数据编织的优势5. 应用场景6. 数据编织 vs 数据仓库6.1 数据存储方式6.2 数据更新和实时性6.3 灵活性和可扩展性6.4 查询性能6.5 数据治理和一致性6.6 适用场景6.7 代码示例比较 7. 数据编织 vs 数据湖7.1 数据存储…

分享一个最近在进行前后端联调时改了2天的bug...

场景再现 我们这边前端端口是8080 后端端口是8121 我们在前端里在首页面写了一个任务 当进入网页三秒后 发起一个叫getLoginUser的请求 我们的getLoginUser是调用的这里 一个异步请求 这边我们前端调用后端的接口也已经写好 我们先把后端跑起来 访问前端页面 接收到了这个…

Air780EP-AT开发-HTTP应用指南

简介 关联文档和使用工具: AT固件获取AT指令手册 概述 4G模块支持HTTP和HTTPS协议, HTTP应用的基本流程如下: 1、激活PDP(参考:http://oldask.openluat.com/article/937)2、初始化HTTP服务3、设置HTTP会话…

Http 和 Https 的区别(图文详解)

在现代网络通信中,保护数据的安全性和用户的隐私是至关重要的。HTTP(Hypertext Transfer Protocol)和 HTTPS(Hypertext Transfer Protocol Secure)是两种常见的网络通信协议,但它们在数据保护方面的能力存在…

剧本杀小程序搭建,互联网下的游戏新体验,实现新增收!

近几年,桌游备受大众青睐,剧本杀行业更是瞬间曝火!拥有强大社交体验与沉浸式游戏体验的剧本杀成为了众多年轻人的新宠,无论是外出游玩还是好友聚会,剧本杀游戏都成为了首选方式。 随着互联网的发展,线上小…

基于DPUSmartNic的云原生SDN解决方案

1. 方案背景与挑战 随着云计算,大数据和人工智能等技术的蓬勃发展,数据中心面临着前所未有的数据洪流和计算压力,这对SDN提出了更高的性能和效率要求。自云原生概念被提出以来,Kubernetes为云原生应用的落地提供了一个轻量级&am…

视频汇聚平台EasyCVR启动出现报错“cannot open shared object file”的原因排查与解决

安防视频监控EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。EasyCVR平台支持多种视频流的外部分发,如RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、fmp4等&#xf…

物联网mqtt网关搭建背后的技术原理

前言 物联网是现在比较热门的软件领域,众多物联网厂商都有自己的物联网平台,而物联网平台其中一个核心的模块就是Mqtt网关。这篇文章的目的是手把手教大家写书写一个mqtt网关,后端存储支持Kafka/Pulsar,支持mqtt 连接、断链、发送…

【Java】中的List集合

目录 一、什么是List集合二、List的常用方法List的初始化元素操作1.添加元素2.删除元素3.修改元素4.查询元素 三、List集合的遍历1.for循环遍历2.增强for循环3.迭代器遍历 一、什么是List集合 List集合是最常用的一种数据结构之一。它具有动态扩容、元素添加、删除和查询等基础…

MongoDB教程(十八):MongoDB MapReduce

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、MapRed…

免费【2024】springboot 趵突泉景区的智慧导游小程序

博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

[数据集][目标检测]躺坐站识别检测数据集VOC+YOLO格式9488张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):9488 标注数量(xml文件个数):9488 标注数量(txt文件个数):9488 标注…

bug诞生记——动态库加载错乱导致程序执行异常

大纲 背景问题发生问题猜测和分析过程是不是编译了本工程中的其他代码是不是有缓存是不是编译了非本工程的文件是不是调用了其他可执行文件查看CMakefiles分析源码检查正在运行程序的动态库 解决方案 这个案例发生在我研究ROS 2的测试Demo时发生的。 整体现象是:修改…

站在资本投资领域如何看待分布式光纤传感行业?

近年来,资本投资领域对于分布式光纤传感行业并不十分敏感。这主要是由于分布式光纤传感技术是一个专业且小众的领域,其生命周期相对较长,缺乏爆发性,与消费品或商业模式创新产业有所不同。此外,国内的投资环境也是影响…