Flutter笔记 - 关于 fit 属性以及相关知识的总结

news2025/1/10 10:38:05
Flutter笔记
关于 fit 属性以及相关知识的总结

作者李俊才 (jcLee95):https://blog.csdn.net/qq_28550263
邮箱 :291148484@163.com
本文地址:https://blog.csdn.net/qq_28550263/article/details/134344516


本文介绍了Flutter框架中 BoxFit 枚举不同枚举值的含义,以及归纳了开发中常见的以 BoxFit 为值的组件,如FittedBox组件Image、FadeInImage等等;以及非组件的工具,如DecorationImage类、applyBoxFit 函数,等等。


1. 概述

本文是一个总结,深入探讨了Flutter中BoxFit枚举的各个值及其在实际编程中的应用。BoxFit是一个关键的枚举,它描述了如何在BoxConstraints中对齐和调整Box,对于控制图像或其他可绘制对象的尺寸和对齐方式具有重要作用。

文中首先详细解释了BoxFit的七个枚举值:fill、contain、cover、fitWidth、fitHeight、none和scaleDown,并通过实例说明了它们在实际应用中的效果和使用场景。

接着,本文介绍了BoxFit在各种Flutter组件中的应用,包括FittedBox、Image、RawImage、FadeInImage和DecorationImage。这些组件在Flutter开发中非常常见,理解和掌握BoxFit的使用,可以帮助开发者更好地控制这些组件的显示效果。

本文也简单介绍了applyBoxFit函数。该函数是Flutter中painting库的一部分,它用于应用BoxFit枚举值。虽然在大多数情况下,开发者不需要直接使用这个函数,但在创建自定义的绘图代码,或者需要手动处理图像或其他可绘制对象的尺寸和对齐方式时,这个函数会非常有用。

此外,本文还介绍了如何在Rive库中使用BoxFit。Rive是一个用于制作动画以及相关交互效果的库,BoxFit在其中也发挥了重要作用。本文详细介绍了RiveAnimation.network、RiveAnimation.asset、RiveAnimation.file和RiveAnimation.memory的使用方法,帮助开发者在使用Rive库时,能够更好地控制动画的显示效果。

2. BoxFit——描述如何在BoxConstraints中对齐和调整Box的枚举

2.1 BoxFit 是什么

作为子组件,会被拉伸填充满父组件,这可能会导致图像变形,因为宽度和高度方向的拉伸比例可能不同。

2.2 BoxFit 枚举值的含义

2.2.1 fill

BoxFit.fill会拉伸子组件以完全填充父组件,这可能会导致子组件的宽高比被改变,因此可能会导致图像变形。这是因为宽度和高度方向的拉伸比例可能不同。这种方式不考虑子组件的宽高比,只关心父组件的空间,尽可能地填充满父组件的全部空间。

在这里插入图片描述

例如,如果你有一个正方形的空间,但是你的图像是一个长方形,那么使用BoxFit.fill,图像会被拉伸或压缩以填充整个正方形的空间,这可能会导致图像看起来扁平或过高。

2.2.2 contain

BoxFit.contain是按原始比例缩放图像,使图像尽可能大,同时确保图像完全位于目标框内。这可能会导致目标框的一部分空间没有被图像填充。

  • 如果图像的宽高比与目标框的宽高比不同,那么未填充的区域将会是空白的。

在这里插入图片描述

2.2.3 cover

BoxFit.cover是按原始比例缩放图像,使图像尽可能大,同时确保目标框完全被图像覆盖。

  • 如果图像的宽高比与目标框的宽高比不同,那么图像将会超出目标框,超出的部分将会被剪裁。

在这里插入图片描述

2.2.4 fitWidth

BoxFit.fitWidth是按原始比例缩放图像,使图像的宽度与目标框的宽度相等。

  • 如果图像的高度小于目标框的高度,那么图像的上下两边将会有空白。
  • 如果图像的高度大于目标框的高度,那么图像的上下两边将会被剪裁。

在这里插入图片描述

2.2.5 fitHeight

BoxFit.fitHeight是按原始比例缩放图像,使图像的高度与目标框的高度相等。

  • 如果图像的宽度小于目标框的宽度,那么图像的左右两边将会有空白。
  • 如果图像的宽度大于目标框的宽度,那么图像的左右两边将会被剪裁。

在这里插入图片描述

2.2.6 none

BoxFit.none是不对图像进行任何缩放,图像将会以其原始大小显示。

  • 如果图像的尺寸大于目标框的尺寸,那么图像将会超出目标框,超出的部分将会被剪裁。
  • 如果图像的尺寸小于目标框的尺寸,那么图像周围将会有空白。

在这里插入图片描述

2.2.7 scaleDown

BoxFit.scaleDown的行为与BoxFit.contain相同,但是它不会放大图像。

  • 如果图像的尺寸小于目标框的尺寸,那么图像将会以其原始大小显示,图像周围将会有空白。
  • 如果图像的尺寸大于目标框的尺寸,那么图像将会被缩小,以确保图像完全位于目标框内,图像周围可能会有空白。

在这里插入图片描述

3. 相关组件

3.1 FittedBox组件

FittedBox 组件根据fit属性的值来缩放和定位其子Widget。其构造函数为:

FittedBox({
  Key? key, 
  BoxFit fit = BoxFit.contain, 
  AlignmentGeometry alignment = Alignment.center, 
  Clip clipBehavior = Clip.none, 
  Widget? child
})

其中:

  • fit:一个BoxFit枚举值,指定如何在分配的空间中放置子Widget。默认值是BoxFit.contain,这意味着子Widget会被缩放以适应其父Widget,同时保持其原始的宽高比。
  • alignment:一个AlignmentGeometry对象,指定如何在FittedBox中对齐子Widget。默认值是Alignment.center,这意味着子Widget会被居中对齐。
  • clipBehavior:一个Clip枚举值,指定如何裁剪子Widget。默认值是Clip.none,这意味着子Widget不会被裁剪。
  • child:子Widget,它会被FittedBox缩放和定位。

例如:

class FittedBoxExample extends StatelessWidget {
  const FittedBoxExample({super.key});

  
  Widget build(BuildContext context) {
    return Container(
      height: 400,
      width: 300,
      color: Colors.blue,
      child: const FittedBox(
        fit: BoxFit.fill,
        child: Placeholder(),
      ),
    );
  }
}
fillcovercontain
在这里插入图片描述在这里插入图片描述在这里插入图片描述
fitWidthfitHeightnonescaleDown
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.2 Image组件

Image是Flutter中的一个Widget,用于显示图像。它有多个构造函数,可以用于从不同的源加载图像。大多数构造函数都接受一个fit参数,这个参数是一个BoxFit枚举值,用于控制图像如何适应其当前分配的空间。

以下是Image的一些主要构造函数:

  1. Image.asset:用于从应用的资源目录中加载图像。fit参数用于控制图像如何适应其父Widget。
Image.asset(
  'graphics/background.png',
  fit: BoxFit.fill,
)
  1. Image.network:用于从网络上加载图像。fit参数用于控制图像如何适应其父Widget。
Image.network(
  'https://example.com/graphics/background.png',
  fit: BoxFit.cover,
)
  1. Image.file:用于从设备的文件系统上加载图像。fit参数用于控制图像如何适应其父Widget。
Image.file(
  File('/path/to/your/image.png'),
  fit: BoxFit.scaleDown,
)
  1. Image.memory:用于从内存中的Uint8List加载图像。fit参数用于控制图像如何适应其父Widget。
Image.memory(
  bytes,
  fit: BoxFit.contain,
)

在所有这些构造函数中,fit参数都是可选的。如果你不提供一个fit值,那么图像将会按照其原始尺寸显示,如果图像的尺寸大于其父Widget的尺寸,那么图像将会被剪裁。如果你提供了一个fit值,那么图像将会根据这个值来适应其父Widget。例如,如果你设置fit: BoxFit.cover,那么图像将会被缩放以完全覆盖其父Widget,可能会部分超出父Widget的范围。

3.3 RawImage组件

RawImage组件直接显示一个 dart:ui.Image 对象。这个组件主要用于在你需要直接处理 dart:ui.Image** 对象时使用,例如你从一个自定义的图像解码器获取了图像,或者你从一个原生插件获取了图像。

RawImage 组件使用 paintImage函数 来绘制图像,这个函数提供了对这个类上的各个字段的详细解释。

值得注意的是,RawImage 不会处理图像的释放。当你不再需要 RawImage 时,你需要手动调用 Image.dispose 来释放图像资源。

在大多数情况下,你不需要直接使用 RawImage。如果你只是需要显示一个图像,那么使用 Image组件会更简单,因为Image组件提供了从各种源(如网络、文件、资源等)加载图像的功能。但是,如果你需要更底层的控制,或者你需要处理 dart:ui.Image对象,那么RawImage可能会用到。

RawImage的构造函数为:

const RawImage(
  Key? key,
  Image? image, // 要显示的图像,这是一个dart:ui.Image对象
  String? debugImageLabel, // 图像的描述标签,仅在调试模式下使用
  double? width, // 图像的宽度,如果为空,则图像的原始宽度将被使用
  double? height, // 图像的高度,如果为空,则图像的原始高度将被使用
  double scale = 1.0, // 图像的缩放比例
  Color? color, // 与图像混合的颜色
  Animation<double>? opacity, // 图像的不透明度,范围从0.0(完全透明)到1.0(完全不透明)
  BlendMode? colorBlendMode, // 用于控制颜色如何与图像混合的模式
  BoxFit? fit, // 图像的适应模式,用于控制图像如何适应其当前分配的空间
  AlignmentGeometry alignment = Alignment.center, // 图像在其父widget中的对齐方式
  ImageRepeat repeat = ImageRepeat.noRepeat, // 图像的重复模式,例如,如果图像小于其分配的空间,那么图像可以重复以填充空间
  Rect? centerSlice, // 图像的中心切片,用于控制图像如何被拉伸
  bool matchTextDirection = false, // 图像是否应根据当前的文本方向进行翻转
  bool invertColors = false, // 图像的颜色是否应被反转
  FilterQuality filterQuality = FilterQuality.low, // 图像的过滤质量
  bool isAntiAlias = false // 图像是否应使用抗锯齿渲染
)

可见,与 Image 组件一样,RawImage组件也有一个fit 属性。一个示意用法的例子如下:

RawImage(
  image: image, // dart:ui.Image对象
  scale: 1.0,
  width: 100.0,
  height: 200.0,
  color: Colors.red,
  colorBlendMode: BlendMode.modulate,
  fit: BoxFit.cover,
)

3.4 FadeInImage组件

FadeInImage 组件 类似于 Image 组件。FadeInImage 组件在目标图像加载时显示一个 占位符图像,然后在图像加载完成时 通过淡入动画显示新图像

这个类非常适合用于 显示加载时间较长的图像,例如网络图像,因为它可以让图像以优雅的动画效果出现在屏幕上,而不是突然出现。

FadeInImage还提供了一些属性来控制动画的行为,例如fadeOutDuration和fadeOutCurve用于控制占位符的淡出动画,fadeInDuration和fadeInCurve用于控制目标图像的淡入动画。

3.4.1 FadeInImage构造函数

FadeInImage({
  Key? key,
  required ImageProvider<Object> placeholder, // 占位符图像
  ImageErrorWidgetBuilder? placeholderErrorBuilder, // 占位符图像加载错误时的回调
  required ImageProvider<Object> image, // 目标图像
  ImageErrorWidgetBuilder? imageErrorBuilder, // 目标图像加载错误时的回调
  bool excludeFromSemantics = false, // 是否从语义树中排除此图像
  String? imageSemanticLabel, // 图像的语义标签
  Duration fadeOutDuration = const Duration(milliseconds: 300), // 占位符图像淡出的持续时间
  Curve fadeOutCurve = Curves.easeOut, // 占位符图像淡出的曲线
  Duration fadeInDuration = const Duration(milliseconds: 700), // 目标图像淡入的持续时间
  Curve fadeInCurve = Curves.easeIn, // 目标图像淡入的曲线
  double? width, // 图像的宽度
  double? height, // 图像的高度
  BoxFit? fit, // 目标图像的适应模式
  BoxFit? placeholderFit, // 占位符图像的适应模式
  FilterQuality filterQuality = FilterQuality.low, // 目标图像的过滤质量
  FilterQuality? placeholderFilterQuality, // 占位符图像的过滤质量
  AlignmentGeometry alignment = Alignment.center, // 图像的对齐方式
  ImageRepeat repeat = ImageRepeat.noRepeat, // 图像的重复模式
  bool matchTextDirection = false // 图像是否应根据当前的文本方向进行翻转
})

其 fit 属性的含义与用法与之前相同,不再赘述。

3.4.2 assetNetwork构造函数

FadeInImage.assetNetwork({
  Key? key, // Widget的标识符
  required String placeholder, // 占位符图像的资源名称
  ImageErrorWidgetBuilder? placeholderErrorBuilder, // 占位符图像加载错误时的回调
  required String image, // 目标图像的URL
  ImageErrorWidgetBuilder? imageErrorBuilder, // 目标图像加载错误时的回调
  AssetBundle? bundle, // 用于加载占位符图像的资源包
  double? placeholderScale, // 占位符图像的缩放比例
  double imageScale = 1.0, // 目标图像的缩放比例
  bool excludeFromSemantics = false, // 是否从语义树中排除此图像
  String? imageSemanticLabel, // 图像的语义标签
  Duration fadeOutDuration = const Duration(milliseconds: 300), // 占位符图像淡出的持续时间
  Curve fadeOutCurve = Curves.easeOut, // 占位符图像淡出的曲线
  Duration fadeInDuration = const Duration(milliseconds: 700), // 目标图像淡入的持续时间
  Curve fadeInCurve = Curves.easeIn, // 目标图像淡入的曲线
  double? width, // 图像的宽度
  double? height, // 图像的高度
  BoxFit? fit, // 目标图像的适应模式
  BoxFit? placeholderFit, // 占位符图像的适应模式
  FilterQuality filterQuality = FilterQuality.low, // 目标图像的过滤质量
  FilterQuality? placeholderFilterQuality, // 占位符图像的过滤质量
  AlignmentGeometry alignment = Alignment.center, // 图像的对齐方式
  ImageRepeat repeat = ImageRepeat.noRepeat, // 图像的重复模式
  bool matchTextDirection = false, // 图像是否应根据当前的文本方向进行翻转
  int? placeholderCacheWidth, // 占位符图像的缓存宽度
  int? placeholderCacheHeight, // 占位符图像的缓存高度
  int? imageCacheWidth, // 目标图像的缓存宽度
  int? imageCacheHeight // 目标图像的缓存高度
})

其 fit 属性的含义与用法与之前相同,不再赘述。

3.4.3 memoryNetwork构造函数

FadeInImage.memoryNetwork({
  Key? key, // Widget的标识符
  required Uint8List placeholder, // 占位符图像的字节
  ImageErrorWidgetBuilder? placeholderErrorBuilder, // 占位符图像加载错误时的回调
  required String image, // 目标图像的URL
  ImageErrorWidgetBuilder? imageErrorBuilder, // 目标图像加载错误时的回调
  double placeholderScale = 1.0, // 占位符图像的缩放比例
  double imageScale = 1.0, // 目标图像的缩放比例
  bool excludeFromSemantics = false, // 是否从语义树中排除此图像
  String? imageSemanticLabel, // 图像的语义标签
  Duration fadeOutDuration = const Duration(milliseconds: 300), // 占位符图像淡出的持续时间
  Curve fadeOutCurve = Curves.easeOut, // 占位符图像淡出的曲线
  Duration fadeInDuration = const Duration(milliseconds: 700), // 目标图像淡入的持续时间
  Curve fadeInCurve = Curves.easeIn, // 目标图像淡入的曲线
  double? width, // 图像的宽度
  double? height, // 图像的高度
  BoxFit? fit, // 目标图像的适应模式
  BoxFit? placeholderFit, // 占位符图像的适应模式
  FilterQuality filterQuality = FilterQuality.low, // 目标图像的过滤质量
  FilterQuality? placeholderFilterQuality, // 占位符图像的过滤质量
  AlignmentGeometry alignment = Alignment.center, // 图像的对齐方式
  ImageRepeat repeat = ImageRepeat.noRepeat, // 图像的重复模式
  bool matchTextDirection = false, // 图像是否应根据当前的文本方向进行翻转
  int? placeholderCacheWidth, // 占位符图像的缓存宽度
  int? placeholderCacheHeight, // 占位符图像的缓存高度
  int? imageCacheWidth, // 目标图像的缓存宽度
  int? imageCacheHeight // 目标图像的缓存高度
})

其 fit 属性的含义与用法与之前相同,不再赘述。

4. DecorationImage类

DecorationImage 是 Flutter中的一个类,它用于在装饰(如BoxDecoration)中显示图像,以配置如何在装饰中绘制图像的。

它不是一个 Widget

DecorationImage({
  required ImageProvider<Object> image, // 要显示的图像,这是一个ImageProvider对象,例如AssetImage、NetworkImage等。
  ImageErrorListener? onError, // 加载图像时发生错误的回调函数。
  ColorFilter? colorFilter, // 应用于图像的颜色过滤器。
  BoxFit? fit, // 图像的适应模式,用于控制图像如何适应其分配的空间。
  AlignmentGeometry alignment = Alignment.center, // 图像在装饰中的对齐方式。
  Rect? centerSlice, // 图像的中心切片,用于控制图像如何被拉伸。
  ImageRepeat repeat = ImageRepeat.noRepeat, // 图像的重复模式,例如,如果图像小于其分配的空间,那么图像可以重复以填充空间。
  bool matchTextDirection = false, // 图像是否应根据当前的文本方向进行翻转。
  double scale = 1.0, // 图像的缩放比例。
  double opacity = 1.0, // 图像的不透明度,范围从0.0(完全透明)到1.0(完全不透明)。
  FilterQuality filterQuality = FilterQuality.low, // 图像的过滤质量。
  bool invertColors = false, // 图像的颜色是否应被反转。
  bool isAntiAlias = false // 图像是否应使用抗锯齿渲染。
})

例如,下面的代码展示了其用法。

BoxDecoration(
  image: DecorationImage(
    image: AssetImage('graphics/background.png'), // 从应用的资源目录中加载图像
    fit: BoxFit.cover, // 图像会被缩放以完全覆盖其父Widget
  ),
)

其中, fit 参数也是 BoxFit 类型,用法与之前所述一致。

5. 关于 applyBoxFit 函数

applyBoxFit函数是Flutter中painting库的一部分,它用于应用BoxFit枚举值。函数的定义如下:

FittedSizes applyBoxFit(
  BoxFit fit,
  Size inputSize,
  Size outputSize
)

其中:

  • fit:一个BoxFit枚举值,指定如何适应目标尺寸。
  • inputSize:源尺寸,即被适应的对象的尺寸。
  • outputSize:目标尺寸,即源尺寸需要适应的尺寸。

函数返回一个FittedSizes对象,它包含两个Size对象:source和destination。

  • FittedSizes.source:源尺寸应该被显示的部分。如果整个源尺寸都应该被显示,那么它将等于inputSize,但是如果源尺寸需要被裁剪,那么它可能会小于inputSize。
  • FittedSizes.destination:源尺寸应该被绘制的目标尺寸的部分。如果FittedSizes.destination小于outputSize,那么源尺寸将会被添加黑边(letterboxed)或柱状黑边(pillarboxed)。

这个函数不会对源尺寸和目标尺寸在输入和输出矩形中的对齐方式表达任何意见。通常,它们是居中的(这是BoxDecoration的行为,也是BoxFit的定义)。Alignment类提供了一个方便的函数Alignment.inscribe,用于将尺寸解析为矩形。

在大多数情况下,你不需要直接使用这个函数。但是,除非你正在创建自定义的绘图代码,或者需要手动处理图像或其他可绘制对象的尺寸和对齐方式时,才会用到。

以下是一个使用applyBoxFit函数的例子:

void paintImage(ui.Image image, Rect outputRect, Canvas canvas, Paint paint, BoxFit fit) {
  final Size imageSize = Size(image.width.toDouble(), image.height.toDouble());
  final FittedSizes sizes = applyBoxFit(fit, imageSize, outputRect.size);
  final Rect inputSubrect = Alignment.center.inscribe(sizes.source, Offset.zero & imageSize);
  final Rect outputSubrect = Alignment.center.inscribe(sizes.destination, outputRect);
  canvas.drawImageRect(image, inputSubrect, outputSubrect, paint);
}

在这个例子中,我们首先获取图像的尺寸,然后使用 applyBoxFit 函数来计算源尺寸应该被缩放和对齐到的尺寸。然后,我们使用Alignment.center.inscribe函数来计算源尺寸和目标尺寸应该被绘制的矩形。最后,我们使用canvas.drawImageRect函数来绘制图像。

5 Rive 库中的 fit

Rive 是一个用于制作动画以及相关交互效果的库。通常在里面制作好了相关的 .riv文件 ,从Rive软件导出后,作为静态资源放在 assets 目录中,或者将 .riv文件 放在一个静态文件服务器中。然后,通过 RiveAnimation 的不同构造方法在项目中使用。

当然,首先需要安装 rive 库:

flutter pub add rive

5.1 RiveAnimation.network

RiveAnimation.network 构造函数用于从网络加载Rive文件。例如:

RiveAnimation.network(
  'https://example.com/myrivefile.riv',
  fit: BoxFit.contain,
)

其中, fit 参数也是 BoxFit 类型,用法与之前所述一致。

5.2 RiveAnimation.asset

RiveAnimation.asset:从项目的资源目录加载Rive文件。例如:

RiveAnimation.asset(
  'assets/myrivefile.riv',
  fit: BoxFit.contain,
)

其中, fit 参数也是 BoxFit 类型,用法与之前所述一致。

5.3 RiveAnimation.file

RiveAnimation.file:从设备的文件系统加载Rive文件。例如:

RiveAnimation.file(
  File('/path/to/myrivefile.riv'),
  fit: BoxFit.contain,
)

其中, fit 参数也是 BoxFit 类型,用法与之前所述一致。

5.4 RiveAnimation.file

RiveAnimation.memory:从内存加载Rive文件。例如:

RiveAnimation.memory(
  bytes,
  fit: BoxFit.contain,
)

其中,bytes是一个包含Rive文件数据的Uint8List。fit 参数也是 BoxFit 类型,用法与之前所述一致。

可见所有这些构造函数都接受一个fit参数,用于控制动画如何适应其分配的空间,以及一个alignment参数,用于控制动画在其分配的空间中的对齐方式。

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

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

相关文章

lenovo联想小新 Air-14 2019 AMD平台API版(81NJ)原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1HCC66EH4UOcgofRx5_v1oA?pwdlgqw 提取码&#xff1a;lgqw 原厂系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xf…

关于Google Play应用商店的优化技巧1

作为Google Play商店ASO策略的一部分&#xff0c;我们需要查明并优化有助于应用排名的各种因素。在这里将介绍几个可以增强我们列表并增加在搜索中被发现的机会的技巧。 1、优化标题和描述字段。 在创建有效的Google Play商店列表时&#xff0c;我们应该考虑的第一个元素是应用…

易货:一种绿色、高效的商业模式

随着社会经济的发展和人民生活水平的提高&#xff0c;人们手中闲置的物品越来越多&#xff0c;如何将这些物品盘活&#xff0c;成为了一个亟待解决的问题。易货商业模式应运而生&#xff0c;它不仅可以将闲置物品变成财富&#xff0c;还可以为企业和个人带来更多的商机和资源。…

【题解】2023-11-11 B层模拟赛T1

宣传一下 算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 CF461B 题目描述 一棵树有 n n n 个节点&#xff0c; n − 1 n − 1 n−1 条边。树上的节点有两种&#xff1a;黑&#xff0c;白节点。 Tyk 想断掉一些边把树分成很多部分。 他想要保证每个部…

【优选算法系列】【专题二滑动窗口】第二节.1004. 最大连续1的个数 III和1658. 将 x 减到 0 的最小操作数

文章目录 前言一、最大连续1的个数 III 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、将 x 减到 0 的最小操作数 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、最大连…

迈巴赫S480升级流星雨大灯 最高配的数字大灯

“流星雨”数字大灯&#xff0c;极具辨识度&#xff0c;通过260万像素的数字微镜技术&#xff0c;实现“流星雨”仪式感与高度精确的光束分布&#xff1b;在远光灯模式下&#xff0c;光束精准度更达之前84颗LED照明的100倍&#xff0c;更新增坡道照明功能&#xff0c;可根据导航…

进程线程

从Android3.0开始&#xff0c;系统要求网络访问必须在子线程中进行&#xff0c;否则会抛出异常&#xff0c;这么做是为了避免主线程被阻塞而导致ANR&#xff0c;那么网络访问的操作就必须要放到线程中去执行。 进程 进程是操作系统结构的基础&#xff0c;是程序在一个数据集合…

极兔面试:微服务爆炸,如何解决?Uber 是怎么解决2200个微服务爆炸的?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#x…

基于HF transformers的AI建模和训练实战

我们经常使用 scikit-learn 对监督学习和无监督学习任务的数据进行建模。 我们熟悉面向对象的设计&#xff0c;例如启动类并从类中调用子函数。 然而&#xff0c;当我个人使用 PyTorch 时&#xff0c;我发现与 scikit-learn 类似但又不一样的设计模式。 在线工具推荐&#xff…

11个最受欢迎的3D打印AI软件【2023】

如今&#xff0c;人工智能&#xff08;AI&#xff09;似乎已经成为每个人都在谈论的话题。 尽管围绕该技术的伦理问题存在着重要的讨论&#xff0c;但不可否认的是&#xff0c;人工智能可能成为包括 3D 打印在内的许多不同行业的重要工具。 事实上&#xff0c;人工智能在 3D 打…

【Java王大师王天师】关注有礼博客模板

【点我-这里送书】 本人详解 作者&#xff1a;王文峰&#xff0c;参加过 CSDN 2020年度博客之星&#xff0c;《Java王大师王天师》 公众号&#xff1a;JAVA开发王大师&#xff0c;专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生&#xff0c;期待你的…

单片机启动流程

存储器 ​ 一个单片机中存在rom和ram&#xff0c;Soc也有rom和ram&#xff08;ddrx&#xff09;&#xff0c;部分Soc还包含MMU&#xff08;Memory Manage Unit 内存管理单元&#xff09;— &#xff08;用于系统内存管理&#xff0c;比如说虚拟内存空间&#xff0c;内存区间的…

YOLOV5改进:RefConv | 即插即用重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点 3.涨点效果:RefConv,实现有效涨点! 论文地址 …

响应式婴幼儿早教启蒙网站模板源码

模板信息&#xff1a; 模板编号&#xff1a;6830 模板编码&#xff1a;UTF8 模板颜色&#xff1a;红色 模板分类&#xff1a;学校、教育、培训、科研 适合行业&#xff1a;培训机构类企业 模板介绍&#xff1a; 本模板自带eyoucms内核&#xff0c;无需再下载eyou系统&#xf…

AI批量剪辑矩阵托管系统----源码技术开发

AI批量剪辑矩阵托管系统----源码技术开发 抖音账号矩阵系统是基于抖音开放平台研发的用于管理和运营多个抖音账号的平台。它可以帮助用户管理账号、发布内容、营销推广、分析数据等多项任务&#xff0c;从而提高账号的曝光度和影响力。 具体来说&#xff0c;抖音账号矩阵系统可…

如何通过命令查看某一文件的内容改动和提交记录

1. 查看最近10条的提交记录 一行显示 git log --oneline -102.查看某一个文件的提交记录 git log --oneline -10 文件路径3.查看某个文件的修改内容 查看某次提交的修改 内容 git show bcd9299 查看某次提交某个文件的修改内容git show bcd9299 文件路径4.对比两次提交内容的…

2011年09月21日 Go生态洞察:Go图像处理包

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

3.0 熟悉IDAPro静态反汇编器

IDA Pro 是一种功能强大且灵活的反汇编工具&#xff0c;可以在许多领域中发挥作用&#xff0c;例如漏洞研究、逆向工程、安全审计和软件开发等&#xff0c;被许多安全专家和软件开发者用于逆向工程和分析二进制代码。它支持大量的二进制文件格式和CPU架构&#xff0c;并提供了强…

C++入门篇3(类和对象【重点】)

文章目录 C入门篇3&#xff08;类和对象【重点】&#xff09;1、面向过程和面向对象2、类的引入3、类的定义4、类的访问限定符及封装4.1、访问限定符4.2、封装 5、类的作用域6、类的实例化&#xff08;对象&#xff09;7、类对象模型7.1、类对象的存储方式7.2、结构体&#xff…

评国青、优青、杰青,到底需要什么级别的文章?五篇代表作如何选?

一到年底就听同事们讨论到底申报“杰青”、“优青”还是“国青”&#xff0c;那么&#xff0c;“杰青”到底是什么呢&#xff1f;它和“优青”、“国青”又有什么区别呢&#xff1f; 杰青&#xff0c;全称“国家杰出青年基金获得者”&#xff0c;是国家自然科学基金里人才资助…