当前位置: 首页 > news >正文

Android 使用 Canvas 和 Paint 实现圆形图片

学习笔记

效果展示:

全部代码:

public class YuanActivity extends AppCompatActivity {private ActivityYuanBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通过 DataBinding 获取布局文件binding = ActivityYuanBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// 设置返回按钮的点击事件,点击时跳转到 MainActivitybinding.fanhuiYuan.setOnClickListener(v -> {Intent intent = new Intent(YuanActivity.this, MainActivity.class);startActivity(intent);});// 加载原始图片(从资源文件加载)Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.userphoto);// 获取圆形裁剪后的图片,这里 500 是圆角的半径Bitmap roundedBitmap = getRoundedCornerBitmap(bitmap, 500);// 设置 ImageView 显示圆形裁剪后的图片binding.yuanjiaophotoYuan.setImageBitmap(roundedBitmap);}/*** 将原始 Bitmap 转换为圆角图片(这里实际是圆形图片)** @param bitmap 原始图片* @param radius 圆角半径* @return 圆角(圆形)图片*/private Bitmap getRoundedCornerBitmap(Bitmap bitmap, float radius) {// 获取原始图片的宽高int width = bitmap.getWidth();int height = bitmap.getHeight();// 创建一个新的 Bitmap,用于保存圆角效果的图像// 使用 ARGB_8888 配置,支持透明度,效果较好Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 创建一个 Canvas 对象,用于在新 Bitmap 上绘制Canvas canvas = new Canvas(output);// 创建 Paint 对象,设置绘制样式Paint paint = new Paint();paint.setAntiAlias(true); // 启用抗锯齿,以确保绘制出来的圆角平滑paint.setFilterBitmap(true); // 启用图像过滤,提高图像质量paint.setDither(true); // 启用抖动,使图像颜色更平滑paint.setColor(Color.BLACK); // 设置画笔颜色为黑色// 创建一个矩形区域,作为圆角矩形的边界RectF rectF = new RectF(0, 0, width, height);// 绘制一个圆角矩形(实际绘制的是一个圆形矩形)// 这里的 radius 就是圆角的半径,设置为较大的值会形成圆形效果canvas.drawRoundRect(rectF, radius, radius, paint);// 设置 Xfermode(混合模式),使得图片绘制在圆角矩形内// SRC_IN 表示仅保留矩形与原图片交集部分的内容,超出部分透明paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));// 将原始图片绘制到圆角矩形区域内canvas.drawBitmap(bitmap, 0, 0, paint);// 返回处理后的圆角图片return output;}
}

学习笔记:使用 CanvasPaint 实现圆角图片

在 Android 中,CanvasPaint 是用于图形绘制的基础类,利用这两者可以对图片进行各种裁剪和样式处理。实现圆角图片的关键是对原始图片进行裁剪,使其边角变圆。通过绘制一个圆角矩形,将图片内容限制在这个矩形内,即可实现圆角效果。

基本概念
  • Canvas:用于绘制图形的画布,可以用来绘制矩形、圆形、图片等内容。
  • Paint:控制绘制的样式,包括颜色、线条宽度、抗锯齿等。
  • Bitmap:位图对象,表示图片的数据,可以对其进行操作(例如裁剪、旋转等)。

步骤说明:实现圆角图片

1. 创建新的 Bitmap

为了将原图裁剪为圆角图像,首先需要创建一个新的 Bitmap,它的宽度和高度与原图相同,并且格式为 ARGB_8888,以保证图片质量。

2. 绘制圆角矩形

使用 CanvasPaint 绘制一个圆角矩形。圆角的半径通过传入的参数来控制,矩形的大小与原始图片相同。

3. 使用 Xfermode 实现图像裁剪

Xfermode 控制图形的混合模式。在这里,使用 PorterDuff.Mode.SRC_IN 可以确保图片只绘制在圆角矩形区域内,其他部分会变成透明。

4. 将原始图片绘制到圆角区域

最后,我们将原始图片绘制到上面创建的圆角矩形区域,从而实现圆角效果。


代码实现:

 
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private ImageView imageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = findViewById(R.id.imageView);// 加载原始图片Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);// 获取圆角裁剪后的图片Bitmap roundedBitmap = getRoundedCornerBitmap(bitmap, 30); // 30是圆角的半径// 显示圆角图片imageView.setImageBitmap(roundedBitmap);}/*** 将 Bitmap 转换为圆角图片** @param bitmap 原始图片* @param radius 圆角半径* @return 圆角图片*/private Bitmap getRoundedCornerBitmap(Bitmap bitmap, float radius) {// 获取图片的宽高int width = bitmap.getWidth();int height = bitmap.getHeight();// 创建一个新的 Bitmap,用于保存圆角效果Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 创建一个 Canvas 用来绘制圆角图像Canvas canvas = new Canvas(output);// 创建一个 Paint 对象Paint paint = new Paint();paint.setAntiAlias(true); // 抗锯齿paint.setFilterBitmap(true); // 使用过滤器paint.setDither(true); // 使用抖动paint.setColor(Color.BLACK); // 设置画笔颜色为黑色// 创建一个矩形,作为圆角矩形的边界RectF rectF = new RectF(0, 0, width, height);// 绘制圆角矩形canvas.drawRoundRect(rectF, radius, radius, paint);// 设置 Xfermode 使图像绘制在圆角矩形区域内paint.setXfermode(new android.graphics.PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN));// 绘制原始图片canvas.drawBitmap(bitmap, 0, 0, paint);return output;}
}

学习笔记:如何实现圆形图片裁剪

概述

本篇学习笔记将讲解如何使用 Android 中的 CanvasPaint 实现圆形图片裁剪的功能。具体实现通过绘制圆形区域并结合 PorterDuff.Mode.SRC_IN 混合模式,将图片裁剪成圆形,并显示在 ImageView 中。

核心概念
  • Canvas:用于绘制图形的画布。所有的绘制操作(如绘制圆形、矩形、图片等)都需要借助 Canvas 对象来进行。
  • Paint:设置绘图样式(如颜色、字体、抗锯齿等)的对象。在绘制时,Paint 控制着图形的样式和外观。
  • PorterDuffXfermode:图像合成模式,控制绘制多个图形时的合成方式。SRC_IN 模式让图像仅在两个区域重叠的地方显示(即保留图像的交集部分)。
  • Bitmap:在 Android 中,图片以 Bitmap 对象的形式存储和处理。通过 Bitmap 对象可以对图片进行裁剪、缩放等处理。
实现步骤
  1. 加载原始图片

    • 使用 BitmapFactory.decodeResource() 从资源中加载图片。这里我们使用了一张图片资源 userphoto
     
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.userphoto);
    

  2. 创建 CanvasPaint 对象

    • Canvas 用于在新的 Bitmap 上绘制图形。我们创建一个新的 Bitmap,大小为图片的最小边长,以确保圆形能够完整地显示。
    • Paint 用于设置绘图样式,setAntiAlias(true) 开启抗锯齿,setFilterBitmap(true) 启用图像过滤,使图像更加平滑。
     
    Canvas canvas = new Canvas(output);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setDither(true);
    paint.setColor(Color.BLACK);
    

  3. 绘制圆形

    • 我们绘制一个圆形,圆心位置为 (width / 2, width / 2),半径为 width / 2,确保圆形正好填满整个 Bitmap
     
    canvas.drawCircle(width / 2f, width / 2f, width / 2f, paint);
    

  4. 设置 Xfermode(图像合成模式)

    • 设置 PorterDuffXfermodeSRC_IN,意味着我们只保留源图像(原始图片)和目标图像(当前圆形区域)交集的部分,其他部分会被透明填充。
    • SRC_IN 模式非常适合用于图片裁剪,因为它只显示重叠的部分。
     
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    

  5. 绘制原始图片到圆形区域

    • 使用 canvas.drawBitmap() 方法将原始图片绘制到指定区域。在这里我们计算了一个矩形区域 Rect,将图片绘制到这个区域内。
     
    canvas.drawBitmap(bitmap, null, rect, paint);
    

  6. 返回处理后的圆形图片

    • 完成绘制后,返回最终的圆形图片 output,可以在 UI 上展示。
     
    return output;
    

代码实现
 
public class YuanActivity extends AppCompatActivity {private ActivityYuanBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);binding = ActivityYuanBinding.inflate(getLayoutInflater());setContentView(binding.getRoot());// 返回按钮点击事件binding.fanhuiYuan.setOnClickListener(v -> {Intent intent = new Intent(YuanActivity.this, MainActivity.class);startActivity(intent);});// 加载原始图片Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.userphoto);// 获取圆形裁剪后的图片Bitmap circularBitmap = getCircularBitmap(bitmap);// 显示圆形图片binding.yuanxinphotoYuan.setImageBitmap(circularBitmap);}// 将图片裁剪为圆形private Bitmap getCircularBitmap(Bitmap bitmap) {// 获取原始图片的最小边长int width = Math.min(bitmap.getWidth(), bitmap.getHeight());// 创建一个新的 Bitmap,用于保存圆形效果的图像Bitmap output = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888);// 创建 Canvas 对象以便在新的 Bitmap 上绘制Canvas canvas = new Canvas(output);// 创建 Paint 对象设置绘图样式Paint paint = new Paint();paint.setAntiAlias(true); // 启用抗锯齿paint.setFilterBitmap(true); // 启用图像过滤paint.setDither(true); // 启用抖动paint.setColor(Color.BLACK); // 设置绘制圆形的颜色为黑色// 绘制圆形canvas.drawCircle(width / 2f, width / 2f, width / 2f, paint);// 设置 Xfermode 只保留源图像与圆形区域交集部分paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));// 计算图片放置区域Rect rect = new Rect(0, 0, width, width);// 绘制原始图片,只有圆形区域内的部分会显示canvas.drawBitmap(bitmap, null, rect, paint);return output; // 返回圆形图片}
}

关键概念详细解释
  1. Bitmap

    • Bitmap 是 Android 中表示图片的对象。它可以通过文件、资源或其他方式生成。在本示例中,我们从资源中加载了一张图片 R.drawable.userphoto,并将其转换为 Bitmap
  2. CanvasPaint

    • Canvas 是一个画布,用于绘制图形。所有的绘制操作(如绘制圆形、矩形、图片等)都是通过 Canvas 完成的。
    • Paint 用于设置绘图时的样式,比如颜色、抗锯齿、过滤器等。
  3. PorterDuff.Mode.SRC_IN

    • PorterDuff 是图像合成的模式。SRC_IN 模式意味着只保留源图像(原图)与目标图像(圆形区域)交集的部分,其余部分会变成透明。这个模式非常适合做图片裁剪,特别是圆形裁剪。
  4. drawCircle

    • Canvas.drawCircle() 用于绘制一个圆形。在裁剪圆形图片时,我们在 Canvas 上绘制一个圆形,作为裁剪的边界。
  5. Xfermode

    • Xfermode 用于定义图形绘制时如何合成。通过设置 SRC_IN 模式,我们确保只有圆形区域内的图片内容被显示,其他区域会被透明填充,从而实现圆形裁剪效果。

总结

通过结合 CanvasPaintPorterDuffXfermode,我们可以灵活地对图片进行裁剪,并实现如圆形、圆角矩形等效果。此方法非常适用于在 Android 中处理图像,并能够快速实现视觉效果。

相关文章:

Android 使用 Canvas 和 Paint 实现圆形图片

学习笔记 效果展示: 全部代码: public class YuanActivity extends AppCompatActivity {private ActivityYuanBinding binding;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 通过 DataBinding 获取布局文件binding …...

vxe-table 键盘操作,设置按键编辑方式,支持覆盖方式与追加方式

vxe-table 全键盘操作,按键编辑方式设置,覆盖方式与追加方式; 通过 keyboard-config.editMode 设置按键编辑方式;支持覆盖方式编辑和追加方式编辑 安装 npm install vxe-pc-ui4.3.15 vxe-table4.9.15// ... import VxeUI from v…...

BUUCTF Pwn [HarekazeCTF2019]baby_rop 题解

下载 checksec 64位 用IDA64打开 定位main函数 栈溢出漏洞 SHIFTF12的字符串看到了binsh 以及函数窗口有system 因为是64位 找到rdi传参和ret栈平衡 构造exp: from pwn import *#p process(./babyrop) p remote("node5.buuoj.cn", 27869)addr_prr 0…...

什么是封装性?C++ 中如何实现封装?封装性的好处是什么?

一、引言 在面向对象编程中,封装性是一个重要的概念。封装可以帮助我们更好地组织和管理代码,提高代码的可维护性、可扩展性和安全性。本文将详细介绍什么是封装性,C 中如何实现封装以及封装性的好处。 二、什么是封装性? 封装…...

【MySQL】[42000][1071] Specified key was too long; max key length is 3072 bytes

问题描述 创建表时发生错误。 create table if not exists tbl_user(id int unsigned auto_increment comment 用户IDprimary key,username varchar(1023) not null comment 用户名,password varchar(1023) default 123456 …...

人工智能驱动的骗局会模仿熟悉的声音

由于人工智能技术的进步,各种现代骗局变得越来越复杂。 这些骗局现在包括人工智能驱动的网络钓鱼技术,即使用人工智能模仿家人或朋友的声音和视频。 诈骗者使用来自社交媒体的内容来制作深度伪造内容,要求提供金钱或个人信息。个人应该通过…...

实数与复数频谱掩蔽在音频分离中的应用

使用实数和复数频谱掩蔽进行音频分离 频谱掩蔽是指在音频信号的频谱表示中,通过选择性地增强或抑制某些频率成分来改善信号质量或实现信号分离的技术。频谱掩蔽可以分为两种类型:实数掩蔽和复数掩蔽。 实数频谱掩蔽 实数频谱掩蔽主要关注音频信号的幅…...

C++算法练习-day62——491.非递减子序列

题目来源:. - 力扣(LeetCode) 题目思路分析 这个问题要求找出数组 nums 中的所有非严格递增子序列,其中每个子序列至少包含两个元素。非严格递增子序列意味着子序列中的元素可以相等,但不允许递减。 为了解决这个问…...

golang实现单例日志对象

原文地址:golang实现单例日志对象 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 介绍 golang有很多日志包,通过设置和修改都能实现日志轮转和自定义日志格式。例如:log、zap、golog、slog、log4go 等等。 …...

Redis——个人笔记留存

今日内容 1. redis1. 概念2. 下载安装3. 命令操作1. 数据结构4. 持久化操作5. 使用Java客户端操作redis Redis 1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库 1.1.什么是NOSQLNoSQL(NoSQL Not Only SQL),意即“不仅仅是SQL”,是…...

c# Grpc取消

net6.0 通过CancellationTokenSource 客户端取消Grpc,服务端判断 IsCancellationRequested 是否取消。 proto: syntax "proto3";// 引用可空类型 import "google/protobuf/wrappers.proto";option csharp_namespace "Grpc.Common"…...

Flask 是什么?

近期开发chatbot 程序,过程中要使用Flask,所以收集资料记录这个套件的信息: Flask 是什么? Flask 是一个轻量级、模块化的 Python Web 框架,用于构建 Web 应用程序和 API。它被设计为简单、灵活且可扩展,…...

智能合约

06-智能合约 0 啥是智能合约? 定义 智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。 角色 区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态 智能合约还…...

【机器学习】分类器

在机器学习(Machine Learning,ML)中,分类器泛指算法或模型,用于将输入数据分为不同的类别或标签。分类器是监督学习的一部分,它依据已知的数据集中的特征和标签进行训练,并根据这些学习到的知识对新的未标记数据进行分…...

ASP 快速参考

ASP 快速参考 概述 ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于动态生成交互性网页。它允许开发者结合HTML、VBScript或JScript脚本语言来创建和运行动态网页或Web应用程序。本快速参考将提供ASP的基础知识、常用内置…...

支持向量机算法:原理、实现与应用

摘要: 本文深入探讨支持向量机(Support Vector Machine,SVM)算法,详细阐述其原理、数学模型、核函数机制以及在分类和回归问题中的应用方式。通过以 Python 和 C# 为例,展示 SVM 算法在不同编程环境下的具体…...

蓝桥杯分治

P1226 【模板】快速幂 题目描述 给你三个整数 𝑎,𝑏,𝑝a,b,p,求 𝑎𝑏 mod 𝑝abmodp。 输入格式 输入只有一行三个整数,分别代表 𝑎,𝑏,𝑝a,b,p。…...

群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。 一、邮件发送父类 在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php&#xff0c;代码如下 <?php /*** 邮件发送父类* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:22*/ namespace Ma…...

COCO数据集理解

COCO&#xff08;Common Objects in Context&#xff09;数据集是一个用于计算机视觉研究的广泛使用的数据集&#xff0c;特别是在物体检测、分割和图像标注等任务中。COCO数据集由微软研究院开发&#xff0c;其主要特点包括&#xff1a; 丰富的标签&#xff1a;COCO数据集包含…...

数据结构与算法学习笔记----堆

数据结构与算法学习笔记----堆 author: 明月清了个风 first publish time: 2024.12.2 revised: 2024.12.3 - 例题标题错误&#xff0c;已修改。 ps⛹从这里开始调整了文章结构&#xff0c;先讲解算法和数据结构基本原理&#xff0c;再给出例题&#xff0c;针对例题中的应用再…...

在玩“吃鸡”的时候游戏崩溃要如何解决?游戏运行时崩溃是什么原因?

“吃鸡”游戏崩溃问题深度解析与解决方案&#xff1a;原因、修复与预防 在紧张刺激的“吃鸡”&#xff08;即《绝地求生》&#xff09;游戏中&#xff0c;突然遭遇游戏崩溃无疑会让玩家倍感沮丧。作为一名经验丰富的软件开发从业者&#xff0c;我深知游戏崩溃可能由多种因素引…...

AndroidAutoSize实战教程:今日头条屏幕适配方案详解

如何在项目中结合 AndroidAutoSize 来进行今日头条屏幕适配&#xff0c;我会具体讲解如何用 AndroidAutoSize 实现屏幕适配&#xff0c;并结合 Kotlin 代码举例分析。 通过 AndroidAutoSize 库来实现屏幕适配&#xff0c;确保在不同的屏幕尺寸、分辨率、密度下&#xff0c;应用…...

学习threejs,通过设置纹理属性来修改纹理贴图的位置和大小

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Texture 贴图 二、&#x1…...

图生3d 图生全景 学习笔记

目录 Aluciddreamer ZoeDepth 会自动下载模型&#xff1a; 图生全景图SD-T2I-360PanoImage&#xff1a; Aluciddreamer GitHub - luciddreamer-cvlab/LucidDreamer: Official code for the paper "LucidDreamer: Domain-free Generation of 3D Gaussian Splatting Sce…...

Delphi 实现键盘模拟、锁定键盘,锁定鼠标等操作

Delphi 模拟按键的方法 SendMessageA 说明: 调用一个窗口的窗口函数&#xff0c;将一条消息发给那个窗口。除非消息处理完毕&#xff0c;否则该函数不会返回SendMessage所包含4个参数: 1. hwnd 32位的窗口句柄窗口可以是任何类型的屏幕对象&#xff0c;因为Win32能够维护大多数…...

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文&#xff0c;工厂方法模式只能搞定单一产品族&#xff0c;遇到需要生产多个产品族时就歇菜了。于是&#xff0c;在需求的“花式鞭策”下&#xff0c;程序员们再次绷紧脑细胞&#xff0c;创造出了更强大的抽象工厂模式&#xff0c;让工厂一次性打包多个产品…...

(四)lerobot开源项目的主从臂的远程操作(带相机)(操作记录)

目录 《项目简介》 一、​B站视频参考&#xff08;推荐&#xff09; 二、确定两个usb相机的端口号 三、远程操作&#xff08;带相机&#xff09; 四、遇到问题 《项目简介》 项目地址&#xff1a;GitHub - huggingface/lerobot: &#x1f917; LeRobot: Making AI for Ro…...

离线安装ollama到服务器

搜了很多教程不满意,弄了半天才弄好&#xff0c;这里记录下&#xff0c;方便以后的人用&#xff0c;那个在线下载太慢&#xff0c;怕不是得下载到明年。 一.从官网下在liunx版的tgz安装包 Releases ollama/ollama (github.com) 查看自己的服务器信息&#xff08;参考 https:/…...

Vue前端开发-多级路由配置

在Vue 路由数组中&#xff0c;允许配置多级的路由对象结构&#xff0c;可以是二级、三级或者更多级别&#xff0c;最大级别原则上没有限制&#xff0c;但通常最大的是三或四级&#xff0c;这种路由结构&#xff0c;称之为多级路由。 例如&#xff1a;一级路由地址/list&#x…...

Yocto bitbake and codeSonar

1 mdm 1.1 屏蔽mdm sysvinit的console输出 - uboot传入参数的时候传入consolenull&#xff0c;这样Linux启动信息没有了 - 还需要在Linux配置中去掉Support for console on AMBA serial port - 文件系统/etc/inittab文件里注释掉::respawn:/sbin/getty -L ttyS000 115200 vt100…...

sheng的学习笔记-【中】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入

课程5_第2周_测验题 目录 第一题 1.假设你为10000个单词学习词嵌入&#xff0c;为了捕获全部范围的单词的变化以及意义&#xff0c;那么词嵌入向量应该是10000维的。 A. 【  】正确 B. 【  】错误 答案&#xff1a; B.【 √ 】错误 第二题 2.什么是t-SNE&#xff1f…...

数字图像处理内容详解

1.对比度 最大亮度 / 最小亮度 2.邻域 m邻接&#xff1a;对于像素p和q&#xff0c;如果p和q四临接&#xff0c;或p和q八临接且两者的四邻域的交集为空 通路&#xff1a;如果俩点全部是K邻接&#xff08;K代表4&#xff0c;8&#xff0c;m&#xff09;&#xff0c;则说明存在K…...

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注&#xff1a;pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…...

QNX的PPS发布/订阅模型

参考资料: QNX官方文档 以下摘自官网介绍: TheQNX NeutrinoPersistent Publish/Subscribe (PPS) service is a small, extensible publish/subscribe service that offers persistence across reboots. It’s designed to provide a simple and easy-to-use solution for b…...

Ubuntu——extrepo添加部分外部软件源

extrepo 是一个用于 Ubuntu 和其他基于 Debian 的系统的工具&#xff0c;它的主要作用是简化和管理外部软件源&#xff08;repositories&#xff09;的添加和更新。通过使用 extrepo&#xff0c;用户可以方便地添加、删除和管理第三方软件源&#xff0c;而不需要手动编辑源列表…...

java基础教程第16篇( 正则表达式)

Java 正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言&#xff0c;但是在每种语言中有细微的差别。 Java 提供了 java.util.regex 包&#xff0c;它包含了 Pattern 和 Matcher 类&#xff0c;用于处理正…...

【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】

以下是一个实现客户端对 Shell HTTP 服务发起 POST 请求并传入 JSON 参数的完整示例。Shell 服务会解析收到的 JSON 数据&#xff0c;根据内容执行操作。 服务端脚本&#xff1a;http_server.sh 以下脚本使用 netcat (nc) 来监听 HTTP 请求&#xff0c;并通过 jq 工具解析 JSO…...

Leetcode 每日一题 290.单词规律

目录 一、问题分析 二、解题思路 三、代码实现 四、复杂度分析 五、总结 在编程的世界里&#xff0c;我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题&#xff1a;给定一种规律 pattern 和一个字符串 s&#xff0c;判断 s 是否遵循与 pattern 相同…...

图像滤波和卷积的不同及MATLAB应用实例

滤波与卷积在图像处理中都是非常重要的运算&#xff0c;但它们有着明显的区别。以下是滤波与卷积的主要不同点&#xff0c;并附带一个MATLAB实例来展示两者在图像处理中的效果差异。 一、滤波与卷积的不同 定义与目的&#xff1a; 1&#xff09;滤波&#xff1a;滤波是一种信…...

【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘

文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论&#xff1a;如何选择适合自…...

详细解读CMA实验室认可

CMA实验室认可&#xff0c;即中国计量认证&#xff08;China Metrology Accreditation&#xff09;的实验室资质认定&#xff0c;以下是对其的详细解读&#xff1a; 一、定义与目的 CMA认证是经省级以上人民政府计量行政部门对实验室的计量检定、测试能力和可靠性考核合格后进…...

H5与支付宝小程序通信,调起扫一扫

1.public/index.html加入代码 <script>if (navigator.userAgent.indexOf(AliApp) > -1) {document.writeln(<script src"https://appx/web-view.min.js" > < / script>);}window.$my my </script>2.vue其他具体页面加入代码 metho…...

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具&#xff0c;用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈&#xff0c;并基于优化建议进行改进。 核心功能&…...

深入浅出机器学习中的梯度下降算法

大家好&#xff0c;在机器学习中&#xff0c;梯度下降算法&#xff08;Gradient Descent&#xff09;是一个重要的概念。它是一种优化算法&#xff0c;用于最小化目标函数&#xff0c;通常是损失函数。梯度下降可以帮助找到一个模型最优的参数&#xff0c;使得模型的预测更加准…...

AIGC 012-Video LDM-更进一步,SD作者将LDM扩展到视频生成任务!

AIGC 012-Video LDM-Stable Video diffusion前身&#xff0c;将LDM扩展到视频生成任务&#xff01; 文章目录 0 论文工作1论文方法实验结果 0 论文工作 Video LDM作者也是Stable diffusion的作者&#xff0c;作者在SD的架构上进行扩展&#xff0c;实现了视频的生成。后续在Vid…...

Rust常用命令总结

安装Rust 检查并更新Ubuntu的软件包 $ sudo apt update $ sudo apt upgrade安装相关依赖&#xff1a;安装GCC、G、MAKE、curl $ sudo apt install build-essential $ sudo apt install curl安装Rust $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh执行命令…...

docker部署RustDesk自建服务器

客户端&#xff1a; Releases rustdesk/rustdesk GitHub 服务端&#xff1a; 项目官方地址&#xff1a;GitHub - rustdesk/rustdesk-server: RustDesk Server Program 1、拉取RustDesk库 docker pull rustdesk/rustdesk-server:latest 阿里云库&#xff1a; docker pu…...

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…...

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…...