图片的显示过程

iOS从磁盘加载一张图片,使用UIImageVIew显示在屏幕上,需要经过以下步骤:(加载->解码->渲染)

                    1、根据URL从磁盘中取出图片数据

                    2、生成UIImageView,把图像数据复制给UIImageView,(imageView.image = image )

                    3、如果图像数据为未解码的PNG/JPG,解码为位图数据; 

                    4、CATransaction捕获到UIImageView layer树的变化

                    5、主线程Runloop提交CATransaction,开始进行图像渲染;         

 

为什么要进行图片的解码?

              答:不管是JPEG还是PNG图片都是一种压缩的位图图形格式,只不过PNG是无损压缩,并且支持alpha通道,而JPEG图片则是有损压缩,可以指定0-100%的压缩比,因此,在将磁盘中的图片渲染到屏幕之前,必须要先得到图片的原始像素数据,才能执行后续的绘制操作。 解码是一个计算量较大的任务,且需要CPU来执行;并且解码出来的图片体积与图片的宽高有关系,而与图片原来的体积无关。  SDWeabImage里将解码放到后台线程执行

             https://www.jianshu.com/p/e9843d5b70a2

             https://www.jianshu.com/p/39b91ecaaac8

             https://www.jianshu.com/p/f750196a264a

 

重新认识Core Animation:

                 Core Animation 在 RunLoop 中注册了一个 Observer,监听了 BeforeWaiting 和 Exit 事件。这个 Observer 的优先级是 2000000,低于常见的其他 Observer。当一个触摸事件到来时,RunLoop 被唤醒,App 中的代码会执行一些操作,比如创建和调整视图层级、设置 UIView 的 frame、修改 CALayer 的透明度、为视图添加一个动画;这些操作最终都会被 CALayer 捕获,并通过 CATransaction 提交到一个中间状态去(CATransaction 的文档略有提到这些内容,但并不完整)。当上面所有操作结束后,RunLoop 即将进入休眠(或者退出)时,关注该事件的 Observer 都会得到通知。这时 CA 注册的那个 Observer 就会在回调中,把所有的中间状态合并提交到 GPU 去显示;如果此处有动画,CA 会通过 DisplayLink 等机制多次触发相关流程

 

自己实现异步加载图片:

                https://www.jianshu.com/p/505585e1109e

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
空间注意力机制可以用来加强模型对于空间位置的关注,从而在分类结果去除小的像素点或小块。以下是一种基于卷积神经网络的空间注意力机制的实现思路: 1. 在分类网络的基础上增加一个注意力模块,该模块包括两个卷积层和一个 Softmax 操作层。假设输入的特征图大小为 $H \times W \times C$,则注意力模块的输出为 $H \times W \times 1$ 的注意力权重矩阵。 2. 在分类网络的输出层之前,将特征图与注意力权重矩阵相乘,得到加权后的特征图。此时,注意力机制已经起到了去除小块的作用。 3. 经过加权后的特征图进入分类网络的输出层进行分类。 以下是一个基于 TensorFlow 的实现示例: ```python import tensorflow as tf # 定义注意力模块 def spatial_attention(inputs): # 输入的特征图大小为 H x W x C x = tf.keras.layers.Conv2D(filters=64, kernel_size=3, padding='same', activation='relu')(inputs) x = tf.keras.layers.Conv2D(filters=1, kernel_size=3, padding='same', activation=None)(x) x = tf.keras.layers.Flatten()(x) x = tf.keras.layers.Softmax()(x) # 输出注意力权重矩阵,大小为 H x W x 1 return tf.reshape(x, [-1, tf.shape(inputs)[1], tf.shape(inputs)[2], 1]) # 定义分类网络 def classification_network(inputs): # 输入的特征图大小为 H x W x C x = tf.keras.layers.Conv2D(filters=64, kernel_size=3, padding='same', activation='relu')(inputs) # 加入空间注意力机制 attention = spatial_attention(x) x = tf.keras.layers.Multiply()([x, attention]) x = tf.keras.layers.Conv2D(filters=128, kernel_size=3, padding='same', activation='relu')(x) x = tf.keras.layers.Flatten()(x) outputs = tf.keras.layers.Dense(units=num_classes, activation='softmax')(x) return outputs ``` 其,`inputs` 为输入的特征图,`num_classes` 为分类的类别数。可以在训练过程使用该网络进行分类任务,并在测试集上进行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值