android 图片解码显示流程
https://blog.csdn.net/jingxia2008/article/details/32327699
问题来源
Gallery 查看图片
ImageViewTouchBase newView =mSlideShowImageViews[mSlideShowImageCurrent];newView.setVisibility(View.VISIBLE);newView.setImageRotateBitmapResetBase(bitmap, true);newView.bringToFront();
通过自己实现的 ImageViewTouchBase 装载图片并显示
package com.android.camera;import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.ImageView;abstract class ImageViewTouchBase extends ImageView {
framework 处理图片
public void setImageResource(int resId) {if (mUri != null || mResource != resId) {updateDrawable(null);mResource = resId;mUri = null;final int oldWidth = mDrawableWidth;final int oldHeight = mDrawableHeight;resolveUri();if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {requestLayout();}invalidate();}}
我们在 gallery 里面打开的图片调用是通过 uri 传过来的,
public void setImageURI(Uri uri) {if (mResource != 0 ||(mUri != uri &&(uri == null || mUri == null || !uri.equals(mUri)))) {updateDrawable(null);mResource = 0;mUri = uri;final int oldWidth = mDrawableWidth;final int oldHeight = mDrawableHeight;resolveUri();if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {requestLayout();}invalidate();}}
android 会解析 uri 得到目标文件路径
} else if (mUri != null) {String scheme = mUri.getScheme();if (ContentResolver.SCHEME_ANDROID_RESOURCE.equals(scheme)) {try {// Load drawable through Resources, to get the source density informationContentResolver.OpenResourceIdResult r =mContext.getContentResolver().getResourceId(mUri);d = r.r.getDrawable(r.id);} catch (Exception e) {Log.w("ImageView", "Unable to open content: " + mUri, e);}} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)|| ContentResolver.SCHEME_FILE.equals(scheme)) {InputStream stream = null;try {stream = mContext.getContentResolver().openInputStream(mUri);d = Drawable.createFromStream(stream, null);} catch (Exception e) {Log.w("ImageView", "Unable to open content: " + mUri, e);} finally {if (stream != null) {try {stream.close();} catch (IOException e) {Log.w("ImageView", "Unable to close content: " + mUri, e);}}}} else {d = Drawable.createFromPath(mUri.toString());}
我们点击 gallery 的图片会产生包括 content 的 uri:
public static Drawable createFromStream(InputStream is, String srcName) {Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, srcName != null ? srcName : "Unknown drawable");try {return createFromResourceStream(null, null, is, srcName, null);} finally {Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);}}
后面的流程就是交给 skia 解析然后获得一个 bitmap 并返回了。 skia 的 decode 能够自己主动识别 steam 里面的数据流创建对应的 decoder。
问题答案
转载于:https://www.cnblogs.com/xfgnongmin/p/10736401.html
android 图片解码显示流程相关推荐
- android图片解码显示,android 图片解码显示流程
问题来源 android 可以在 gallery 里面显示内部存储的图片,支持 jpeg,png,gif,bmp 等,甚至文件类型和图片后缀名不一致,只要是图片文件就能显示,然后 git 只会显示第一 ...
- android 图片气泡,android图片上显示气泡消息
经常需要在一个图片上面显示一个气泡,在气泡上面显示消息的数量.这里提供一种方法,直接设置textview的背景色,并且设置textview的文本信息. xmlns:tools="http:/ ...
- Android APN的显示流程源代码分析
一.名词介绍 1.PLMN(Public Land Mobile Network,公共陆地移动网络)由政府或它所批准的经营者,为公众提供陆地移动通信业务目的而建立和经营的网络.一句话:一个移动通信网络 ...
- ThumbnailUtils.extractThumbnail Android图片缩略图显示总结及比较
博客源址:Android图片缩放总结及比较 博客时间:2011-08-01 17:42 在Android中对大图片进行缩放真的很不尽如人意,不知道是不是我的方法不对.下面我列出3种对图片缩放的方法,并 ...
- Android 图片黑白显示 自定义饱和度
Android 自定义显示黑白色图片 1.先下载下来需要显示的图片(或头像) 我模拟下,将图片放到assert文件夹下,拿到他的InputStream.代码如下: 1 InputStream in = ...
- android 图片百分比显示,Android编程实现等比例显示图片的方法
本文实例讲述了Android编程实现等比例显示图片的方法.分享给大家供大家参考,具体如下: 在android中,由于密度的影响,如果想得到图片的宽高是不行的,具体为什么我就大概说一下,具体的请搜索度娘 ...
- android屏幕旋转显示流程
PAD默认屏幕显示方向是竖着显示,改成默认横屏显示需要将屏幕的默认显示方向顺时针旋转90度. android显示系统的核心是surfaceflinger,它为所有的应用程序提供显示服务,它能够将各种应 ...
- Android 图片缩略图显示
//通过openRawResource获取一个inputStream对象InputStream inputStream = getResources().openRawResource(R.drawa ...
- 【Android SDM660源码分析】- 03 - UEFI XBL GraphicsOutput BMP图片显示流程
[Android SDM660源码分析]- 03 - UEFI XBL GraphicsOutput BMP图片显示流程 1. GraphicsOutput.h 2. 显示驱动初化 DisplayDx ...
最新文章
- Calabash探索3-Calabash进阶
- .Net Core 项目引用本地类库方式(二)
- Python编程基础:第三节 字符串方法String Methods
- Xilinx FPGA PLL 资源与INTEL FPGA PLL资源locked信号的不同
- 英语口语-文章朗读Week10 Wednesday
- arp 华为 查看 路由器_华为路由器运行状态查看-路由器
- 计算机的工作原理是二进制原理吗,电子计算机的工作原理基于二进制。()
- 索引更新:刚发布的文章就能被搜到,这是怎么做到的?
- JavaScript的对象观
- 操作系统原理与实践-1熟悉实验环境
- WinXP系统连接网络教程
- heic转换成jpg,学会这个方法就够了
- 关于笔记本双显卡状态下独立显卡的配置问题
- 面试通过了,也给了Offer,不去有什么后果?
- 【Windows】中DOMAIN域
- 在MNIST数据集上训练一个手写数字识别模型
- Unity动画机制 Animator与Animator Controller教程
- 如何发现「将死」的ReLu?可视化工具TensorBoard助你一臂之力
- 5V转3.3V的N种方法
- 手机连接无线没有网络连接到服务器是怎么回事啊,手机连接WIFI后无法上网,是怎么回事?...
热门文章
- 2-9 彩虹瓶 (20 分)
- 爱签电子合同助力房产交易电子化
- HDU 1010 Tempter of the Bone heuristic 剪枝法
- 新钛云服数字化转型服务案例入选Forrester报告!
- 二层业务之vlan mapping dot1q tunnel
- Kubernetes【升级】 CKS 2021【11】---Cluster Hardening - Upgrade Kubernetes
- 思科精锐SG220开启snmp命令详解
- dos重启计算机命令行,命令行中,重启计算机的命令是什么
- 毫无保留,这是我全部的嵌入式学习秋招经验!
- 西门子Wincc+S7-300污水处理大项目 带西门子Wincc上位机+S7-300程序