利用图像解码器加载并显示图片的步骤分为以下三步: 1、调用ImageDecoder的createSource方法,从指定地方获得数据源; 2、调用ImageDecoder的decodeDrawable 加载相册中的某张图片,此时从系统媒体库得到Uri类型的图片路径,则详细的图像加载代码示例如下: // 利用Android9.0新增的ImageDecoder读取图片 ImageDecoder.Source ,似乎ImageDecoder并无什么优势,因为若是JPEG或者PNG图片,直接调用图像视图的setImageURI方法即可。 当然,ImageDecoder的存在意义是为了处理新的图片格式,而不是在老格式上一争高下。 decoder, ImageDecoder.ImageInfo info, ImageDecoder.Source source) { // 获取图像信息的媒体类型与是否动图
1ImageDecoder.OnHeaderDecodedListener listener = new ImageDecoder.OnHeaderDecodedListener() { 2 @Override 3 public void onHeaderDecoded(ImageDecoder decoder, ImageDecoder.ImageInfo (2); 6 } 7 }; 8 ImageDecoder.Source source = ImageDecoder.createSource (source, listener); 11 //转换成Bitmap对象 12 //Bitmap bitmap = ImageDecoder.decodeBitmap ( 3 ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); 4 5 if (decodedAnimation
supportHEIF()) { return null } var source: ImageDecoder.Source = ImageDecoder.createSource supportHEIF()) { return null } var source: ImageDecoder.Source = ImageDecoder.createSource (File(filePath)) return ImageDecoder.decodeBitmap(source) } 另外扫描本地图片则继续使用 ContentResolver 即可, 二、ImageDecoder 上面已经介绍到了 ImageDecoder 在解码 HEIF 图片中的应用,但是实际它的功能完全不仅于此,在 Android P 中它可以完全替代 BitmapFactory ImageDecoder.Source 对象就能生成图片的 Drawable 或者 Bitmap 对象引用。
ImageDecoder.Source source = ImageDecoder.createSource(FILE_PATH); try { bitmap = ImageDecoder.decodeBitmap public void onHeaderDecoded(ImageDecoder decoder, ImageDecoder.ImageInfo info 的另一个优势在于: 通过传入一个 ImageDecoder.OnHeaderDecodedListener 并检查 ImageDecoder.ImageInfo#getColorSpace(),您可以在获取最终的位图之前 ImageDecoder.Source source = ImageDecoder.createSource(FILE_PATH); try { bitmap = ImageDecoder.decodeBitmap public void onHeaderDecoded(ImageDecoder decoder, ImageDecoder.ImageInfo info
3.1.3 ImageDecoder 从 Android P (API 等级 28) 开始,Android引入了现代化图片解码工具 ImageDecoder。 如果您已将 APK 升级至 API 等级 28 或更高,我们建议您使用 ImageDecoder,而非 BitmapFactory 或 BitmapFactory.Option API。 针对ImageDecoder可以通过ImageDecoder.setTargetColorSpace实现目标色彩空间转换: ImageDecoder.Source source = ImageDecoder.createSource (FILE_PATH); try { bitmap = ImageDecoder.decodeBitmap(source, new ImageDecoder.OnHeaderDecodedListener ImageDecoder.ImageInfo info, ImageDecoder.Source source) {
由此可以用ImageDecoder来替换BitmapFactory和BitmapFactory.Options。更多使用方法请参见官方API。 String filePath = "test"; File file = new File(filePath); ImageDecoder.Source source = ImageDecoder.createSource (file); ImageDecoder.decodeBitmap(source); ImageDecoder.decodeDrawable(source, (imageDecoder, imageInfo , source1) -> { //裁剪图像 imageDecoder.setCrop(); //调整大小 imageDecoder.setResize(); }); BitmapFactory.decodeFile Drawable d = ImageDecoder.decodeDrawable(...); if (d instanceof AnimatedImageDrawable) { // Prior to
supportHEIF()) { return null } var source: ImageDecoder.Source = ImageDecoder.createSource supportHEIF()) { return null } var source: ImageDecoder.Source = ImageDecoder.createSource (File(filePath)) return ImageDecoder.decodeBitmap(source) } 另外扫描本地图片则继续使用 ContentResolver 即可, 二、ImageDecoder 上面已经介绍到了 ImageDecoder 在解码 HEIF 图片中的应用,但是实际它的功能完全不仅于此,在 Android P 中它可以完全替代 BitmapFactory ImageDecoder.Source 对象就能生成图片的 Drawable 或者 Bitmap 对象引用。
supportHEIF()) { return null } var source: ImageDecoder.Source = ImageDecoder.createSource supportHEIF()) { return null } var source: ImageDecoder.Source = ImageDecoder.createSource 二、ImageDecoder 上面已经介绍到了 ImageDecoder 在解码 HEIF 图片中的应用,但是实际它的功能完全不仅于此,在 Android P 中它可以完全替代 BitmapFactory ImageDecoder.Source 对象就能生成图片的 Drawable 或者 Bitmap 对象引用。 ImageDecoder 支持 PNG、JPEG、WEBP、GIF 和 HEIF 多种格式图片的解码,另外解码 GIF 或者 WEBP 格式图片得到的是一个 AnimatedImageDrawable
Bitmap内存回收的隐藏BUG 新方案:使用ImageDecoder替代BitmapFactory ImageDecoder.Source source = ImageDecoder.createSource (resources, R.drawable.image); Bitmap bitmap = ImageDecoder.decodeBitmap(source); 三、UI渲染篇(Compose
关于ImageDecoder和ImageDecoderExt 所有的图像格式decoders都包含了ImageDecoder实现,其中主要过程是从图像文件中获取图像的metadata并解码图像。
五、支持图像媒体后期处理 ------------ Android P引入了新的ImageDecoder,该类除了支持对各种图片格式的解码、缩放、裁剪之外,其强大之处在于支持对解码后的图像做后期处理(post-process 此外,Android P原生支持GIF和WebP格式的动图,新增了AnimagedImageDrawable类,并被新增的解码器类ImageDecoder直接支持,用法跟矢量动画类AnimatedVectorDrawable ; return; } ImageDecoder.Source source = ImageDecoder.createSource(gifFile); try { d = ImageDecoder.decodeDrawable (source, new ImageDecoder.OnHeaderDecodedListener() { @Override public void onHeaderDecoded(ImageDecoder imageDecoder, final ImageDecoder.ImageInfo imageInfo, ImageDecoder.Source source) { imageDecoder.setPostProcessor
五、支持图像媒体后期处理 Android P引入了新的ImageDecoder,该类除了支持对各种图片格式的解码、缩放、裁剪之外,其强大之处在于支持对解码后的图像做后期处理(post-process), ; return; } ImageDecoder.Source source = ImageDecoder.createSource(gifFile); try { d = ImageDecoder.decodeDrawable (source, new ImageDecoder.OnHeaderDecodedListener() { @Override public void onHeaderDecoded (ImageDecoder imageDecoder, final ImageDecoder.ImageInfo imageInfo, ImageDecoder.Source source) { imageDecoder.setPostProcessor(new PostProcessor() { @Override public
用于drawables和bitmaps的ImageDecoder Android 9引入了 ImageDecoder 该类,它提供了一种用于解码图像的现代化方法。 ImageDecoder允许new一个 Drawable或一个 Bitmap字节缓冲区,文件或URI。要解码图像,请先createSource() 使用编码图像的来源进行调用 。 一旦知道,就ImageDecoder调用onHeaderDecoded()图像的默认宽度和高度。 一个AnimatedImageDrawable可以利用的实例进行解码 ImageDecoder。 Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources
Android从9.0开始增加了新的图像解码器ImageDecoder,该解码器支持直接读取GIF文件的图形数据,结合图形工具Animatable即可在图像视图上显示GIF动图。 虽然通过ImageDecoder能够在界面上播放GIF动画,但是一方面实现代码有些臃肿,另一方面在Android9.0之后才支持,显然不太好用。
用于位图和 drawable 的 ImageDecoder Android P 引入了一种更简单的方法来将图像解码为位图或 drawable,即用 ImageDecoder 替代了 BitmapFactory ImageDecoder 允许您从字节缓冲区、文件或 URI 创建位图或 drawable。 如果您想要对图像进行后期处理 (例如应用圆角蒙版或更复杂的效果) ,您可以给 ImageDecoder 传递任何 android.graphics.PostProcessor。 您也可以使用 ImageDecoder.decodeDrawable() 直接创建 drawable。 此外,您还可以通过 ImageDecoder 和 Bitmap Factory 将 jpeg 文件转化为 heic 文件,从 jpeg 文件中获取位图。
Bitmap 或添加展示的动画效果; BitmapProcessor :可以处理原始的Bitmap ; MemoryCache : Bitmap 内存缓存接口; DiskCache :磁盘缓存; ImageDecoder 比如使用HttpClient或者OkHttp final ImageDownloader downloader; //将图像解码为Bitmap,将其缩放到所需大小 final ImageDecoder public interface ImageDecoder { Bitmap decode(ImageDecodingInfo imageDecodingInfo) throws IOException ; } public static ImageDecoder createImageDecoder(boolean loggingEnabled) { return new BaseImageDecoder public class BaseImageDecoder implements ImageDecoder { @Override public Bitmap decode(ImageDecodingInfo
在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader
Source) at sun.awt.image.ImageRepresentation.setPixels(Unknown Source) at sun.awt.image.ImageDecoder.setPixels
在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader
用于位图和可绘制的ImageDecoder: ImageDecoder(不支持BitmapFactory)允许你从字节缓存、文件或URI中创建位图或绘图。