利用Android 2.2新特性完成缩略图(二)

android获取视频缩略图 1.使用缩略图的工具类 Bitmap videoThumbnail = ThumbnailUtils.createVideoThumbnail( videoUrl, MediaStore.Video.Thumbnails.MICRO_KIND); //大小为96*96,改成MINI_KIND,大小为512 x 384 2.使用MediaMetadataRetriever Bitmap b... 阅读详情
 

  在Android 2.2版本之前,如果需要完成缩略图功能,往往是通过Bitmap、Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图。但是到了Andorid 2.2版本,如果大家还这么做,那么就证明大家已经成为那个专打怪兽的奥特曼(out man)超人了。

  在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单,它提供了一个常量和三个方法。利用这些常数和方法,可以轻松快捷的实现图片和视频的缩略图功能。(亲,你没有看错,还包括生成视频的缩略图哦)

  下面将依次说明一下这些常数和方法。

  常数:

    OPTIONS_RECYCLE_INPUT: 从此常量用于表示应该回收extractThumbnail(Bitmap, int, int, int)输入源图片(第一个参数),除非输出图片就是输入图片。

  方法:

    Bitmap createVideoThumbnail(String filePath, int kind)

      从方法名称即可看出,这个方法用于生成视频缩略图。

        参数:

          filePath: 视频文件路径

          kind:  文件种类,可以是 MINI_KIND 或 MICRO_KIND

 

    Bitmap extractThumbnail(Bitmap source, int width, int height, int options)

      此方法用于生成一个指定大小的图片缩略图。

        参数:

          source: 需要被创造缩略图的源位图对象

          width: 生成目标的宽度

          height: 生成目标的高度

          options:在缩略图抽取时提供的选项

 

    Bitmap extractThumbnail(Bitmap source, int width, int height)

      此方法用于生成一个指定大小的图片缩略图。

        参数:

          source: 需要被创造缩略图的源位图对象

          width: 生成目标的宽度

          height: 生成目标的高度

  简单的方法,简单的常数,看完这些后,就可以开始创建缩略图了。下面以创建一个美女图片的缩略图为例,展示一下创建缩略图的步骤:  

  布局文件 main.xml:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="#999999" android:layout_width="fill_parent" android:layout_height="fill_parent">
     <ImageView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/girl"/>
     <TextView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="缩略图:" android:textColor="#000000"/>
     <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginTop="10dp"/>
 </LinearLayout>


Activity代码:

public class MainActivity extends Activity {
     
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        ImageView humbnail = (ImageView) findViewById(R.id.image);        
         
        //获得一个Drawable对象
        Drawable girl = getResources().getDrawable(R.drawable.girl);
        //将Drawable对象强转为Bitmap位图对象
        Bitmap bitmap = ((BitmapDrawable)girl).getBitmap();
        //利用Bitmap位图对象生成缩略图
        bitmap = ThumbnailUtils.extractThumbnail(bitmap, 51, 108);
                 
        humbnail.setImageBitmap(bitmap);
     }
 }


  好了,运行结果出来了,如图所示,运行结果如预想一样,创建了一个美女图片的缩略图,并且显示了出来。这样的结果看上去丝毫问题没有,但是在这里,需要指出的是,虽然结果正确,但是过程却是不正确的。

  “过程不正确,那作者你为什么要这么写呢?”,这样的问题可能会出现在各位读者的脑海中。别急,接下来我就解释一下我为什么要这么写,另外再重写一个正确的代码给大家。大家注意下面这两行代码:

//获得一个Drawable对象
        Drawable girl = getResources().getDrawable(R.drawable.girl);
        //将Drawable对象强转为Bitmap位图对象
        Bitmap bitmap = ((BitmapDrawable)girl).getBitmap();


 

  我相信绝大部分人都会通过这么一种强制转换的方法来实现从Drawable到BitmapDrawable的转换,这也是网上疯狂流传并误导大家的。首先,利用强制转换的方法来实现类型转换这种方式,从代码的角度看,它是不优雅的,是简单粗暴的,缺乏代码的美感;其次,因为BitmapDrawable是Drawable的子类,所以无法保证没一个Drawable对象都能正确的强制转换为BitmapDrawable,这就给代码增加了安全的因素。

  其实Google的工程师们提供了从资源文件优雅获取BitmapDrawable对象的方式。下面,我将贴出真正正确的写法。

public class MainActivity extends Activity {
     
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        ImageView humbnail = (ImageView) findViewById(R.id.image);        
         
        //通过openRawResource获取一个InputStream对象
        InputStream input = getResources().openRawResource(R.drawable.girl);
        //通过InputStream创建BitmapDrawable对象
        BitmapDrawable girl = new BitmapDrawable(input);
        //通过BitmapDrawable对象获取Bitmap对象
        Bitmap bitmap = girl.getBitmap();
        //利用Bitmpa对象创建缩略图
        bitmap = ThumbnailUtils.extractThumbnail(bitmap, 51, 108);
                 
        humbnail.setImageBitmap(bitmap);
     }
 }

这样获取BitmapDrawable对象的方式,是否比前面的代码优雅并且安全了呢?

 

原文:http://www.cnblogs.com/wisekingokok/archive/2011/08/26/2154140.html

2021年全国职业院校技能大赛高职组网络系统管理赛项 S1 Ruijie(config)#switch virtual domain 1 Ruijie(config-vs-domain)#switch 1 Ruijie(config-vs-domain)#switch 1 priority 150 Ruijie(config-vs-domain)#switch 1 description S1 Ruijie(config-vs-domain)#exit Ruijie(config)#vsl-port Ruijie(config-vsl-port)#po 阅读详情

相关推荐

避开PSRR仿真三大坑:用Cadence psspxf分析分频器时,这些设置错了白忙活

本文深入探讨了使用Cadence psspxf工具进行分频器PSRR仿真时常见的三大技术陷阱,包括扰动信号参数设置、收敛性优化和后处理信号提取。通过详细的参数推荐和实战技巧,帮助工程师避免仿真误差,提升PSRR分析效率与准确性,特别适用于16分频器等数字-模拟混合电路设计。

weixin_29258297的博客 300

利用Android 2.2新特性完成缩略图

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33895657的博客 189

在Cursor IDE中集成Datadog监控:自然语言查询实战指南

在云原生和微服务架构中,可观测性(Observability)已成为保障系统稳定性的核心技术支柱。其核心原理是通过日志(Logs)、指标(Metrics)和追踪(Traces)三大支柱,实时采集并呈现系统的运行状态。这项技术的价值在于,它让开发者能够透视复杂的分布式系统,快速定位性能瓶颈与故障根因。在实际的工程实践中,开发人员常常需要在编码环境与监控平台之间频繁切换,这种上下文切换严重影响了排障效率。本文聚焦于如何利用Model Context Protocol(MCP),将强大的Datadog可观测性平台

weixin_42519772的博客 348

安卓Android阿里OSS上传图片(缩略图使用)三步完成+源码例子

安卓阿里OSS上传图片三步完成+源码例子

KX興博客 1万+

3D视觉-结构光测量-线结构光测量

线结构光测量中,由激光器射出的激光光束透过柱面透镜扩束,再经过准直,产生一束片状光。这片光束像刀刃一样横切在待测物体表面,因此线结构光法又被成为光切法。线结构光测量常采用二维面阵CCD作为接受器件,因此只要通过增加垂直于面阵探测器的第三维度方向,就可以实现对三维物体的测量。

qq_20660115的博客 3126

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 259

【Android】缩略图Thumbnails

【Android】缩略图Thumbnails 在Android,多媒体文件(视频和图片)都是有缩略图的,在很多应用中,我们需要获取这些缩略图。比如最近在做一个类似相册的应用,需要扫描相册里面的图片,然后获取其缩略图,使用GridView去展示缩略图,当点击之后,我们需要获取其原始图,所以相关的需求如下: 1)获取缩略图(一个问题是:是否所有的图片以及视频都有缩略图?); 2)将缩略图和原始图

善感的人 2万+

Sony DPT RP1/CP1破解攻略

前言 自己有一台Sony DPT CP1和一台kindle,两个都已经用了很多年。直到最近发现微信读书上经常可以找到一些免费而且不错的书,所以就萌生了在两台机器上使用微信读书的想法。kindle比较容易实现,直接打开内置浏览器,进入微信读书网页版就行了,而Sony的电纸书则只能通过破解+安装微信读书的方式实现。大概弄了两三个小时吧,也遇到了一些问题,所以这里记录一下整个过程,希望能方便后来的使用者。 首先感谢HappyZ, osc_t5nbj8ds。前者是提供公开破解的方法的大神,后者则是解决了我遇到的问题

weixin_43467572的博客 1万+

安卓加载视频缩略图,展示于ListView中,完美实现

安卓获取视频缩略图,展示于ListView中,完美实现本篇博客为原创,来自于vitamio,转载请注明出处。应用场景:获取安卓手机外部存储视频列表,适配器继承至CursorAdapter,利用ViewHolder进行优化;并利用异步加载和缓存机制,在加上一个绑定TAG机制。在ListView中展示视频某一帧的图片,视频名称,视频大小以及视频时长。

vitamio的博客 1万+

探索gtwr of mgtwr in python

代码】探索gtwr of GWmodel in python。

m0_46268055的博客 3388

【华为OD技术面】 - 考到的Lettcode手撕算法代码真题目录

【华为OD技术面 - 考到的Lettcode手撕算法代码真题目录

算法大师! 7810

Android生成缩略图

Android生成缩略图-使用Android 2.2新特性完成 在Android 2.2版本之前,如果需要完成缩略图功能,往往是通过Bitmap、Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图。但是到了Andorid 2.2版本,如果大家还这么做,那么就证明大家已经成为那个专打怪兽的奥特曼(out man)超人了。 在Android 2.2...

iteye_7379的博客 395

如何在SpringBoot中实现AI 流式输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

关于 android 的缩略图 Thumbnail

用安卓手机的人可能经常会觉得, 每隔些时间就得清理一下空间, 这与很多手机的 APK 只能安装到 /data 分区, 或者 data 分区与 sdcard 分区都是 mount 自同一块 dev 上有关; 今天想说的其实是 android 另外一个坑, 就是图片缩略图, 使用前几年的安卓手机的人, 可能就会有这个印象, DCIM 目录下有个 .thumbnail 目录好狠, 吃空间的大户, 以我在

leonxu_sjtu的博客 3272

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Kotlin拿Android本地视频缩略图

Kotlin拿Android本地视频缩略图 如何拿到本地视频? 怎么拿视频缩略图? 缩略图如何压缩? MediaMetadataRetriever可以通过视频系统路径,直接使用getFrameAtTime方法拿到第一帧作为缩略图 ThumbnailUtils.createVideoThumbnail其实也是使用的MediaMetadataRetriever,如下源码 Glide项目中一般会使用图片加载框架如Glide,它内部也是支持加载视频作为图片的,亦是使用MediaMetadataRetriever

让学习编程变得生动有趣~ 3588

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

android 获取网络视频缩略图

android 获取网络视频缩略图【完美兼容各版本】 首先是一个不太完美但非常简洁的解决方案,在多数手机测试通过,目前只有samsung TabletGTP7310未能正常显示,但能通过本文方案二解决。 方案一:感谢@xjxuvup提供 鉴于多数人都用过ThumbnailUtils.createVideoThumbnail()方法,该方法在2.x系统下可用,API LEVE

u011506413的博客 4417

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android中如何获取视频文件的缩略图

欢迎访问我的个人博客阅读:http://androidfuture.com/blog/?p=195 在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRetriever类 三种方法各有利弊 第一种方法,新视频增加后需要S

cs870101的专栏 1万+

Android学习笔记进阶20之得到图片的缩略图

简介 之前往往是通过Bitmap、Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图。 现在我给大家介绍一种比较简单的方法:(网上有) 在Android 2.2版本中,新增了一个ThumbnailUtils工具类来是实现缩略图,此工具类的功能是强大的,使用是简单,它提供了一个常量和三个方法。利用这些常数和方法,可以轻松快捷的实现图片和视频的缩略图功能

落日小屋 1万+

Android生成缩略图-使用Android 2.2新特性完成

在Android 2.2版本之前,如果需要完成缩略图功能,往往是通过Bitmap、Drawable和Canvas配合完成,需要写一系列繁杂的逻辑去缩小原有图片,从而得到缩略图。但是到了Andorid 2.2版本,如果大家还这么做,那么就证明大家已经成为那个专打怪兽的奥特曼(out

586

android缩略图在哪,Android 缩略图问题

1.对于安卓框架层提供的媒体库中的图片是否都有对应的缩略图?2.如何查找图片的对应缩略图?3.没有缩略图的文件能否生成?在大图已经获取到的情况下,使用BitmapFactory也能解析出来缩略图,方法如下Options options=newOptions();options.inSampleSize=32;(采样率)将图片加载到内存中所占用内存是原图1/32,只能是2的平方数,不准确)Bitma...

weixin_32023091的博客 1839

android获取图片缩略图,Android系获取图片和视频的缩略图

获取手机里视频缩略图:public static Bitmap getVideoThumbnail(ContentResolver cr,Uri uri) {Bitmap bitmap = null;BitmapFactory.Options options = new BitmapFactory.Options();options.inDither = false;options.inPrefe...

weixin_36386044的博客 1231

android/安卓获取视频文件缩略图及时长

啥也不说了 , 直接 上代码 吧! //获取指定文件夹下所有视频文件 public static List getVideo(Context context, String fileAbsolutePath) { ArrayList list = new ArrayList<>(); File file = new File(fileAbsol

老科程序 2923

Android获取手机本地图片缩略图

首先,提取图片和视频的缩略图可以直接访问Android系统数据库: 1 android.provider.MediaStore.Images.Thumbnails 2 android.provider.MediaStore.Video.Thumbnails 这两个数据库,即可查询出来缩略图 可以根据下面方法获取 public long getDbId(String path, b

fly_yuge的博客 3258

关于点击popupwindow以外区域 popupwindow自动消失问题

方法一(这种方法可以处理popupwindows dimiss的时候一些其他的操作,比如让其他控件的隐藏,消失等): 代码如下popupWindow.setFocusable(false);//focusable要为false(不设置默认的就是False); //这是Activity 的OnTouchEvent。OnTouchEvent代表的是Activity 获得事件(即为PopupWind

那小子很坏 4万+
上一篇: Android 获取图片之固定大小的缩略图(一)
下一篇: android自定义menu,PopUpWindow弹出菜单
Admin_
博客等级 码龄16年 28粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值