2312skia,12画布包与路径包

画布包

Skia现在提供了,在Web上轻松部署图形APIWebAssembly构建,即CanvasKit.
CanvasKit提供了测试新的CanvasSVG平台API的地基,从而在Web平台上,实现快节奏开发.还可用作要求如SkiaLottie动画支持等边角特征的自定义Web应用的部署机制.

特征

1,按允许直接绘画到HTML画布的SkSurface封装的WebGL环境
2,提供Skiacanvas/paint/path/text接口的核心集,见绑定
3,绘画到硬件加速的后端
4,使用Skia模糊安全测试

下载

NPM上取CanvasKit这里.可在npm包的types/子目录中或Skia仓库中找到文档ts定义.

另见快速入门指南.

路径包.

Skia已用WebAssemblyasm.js提供其SkPath对象和许多相关方法给JS客户(如Web浏览器).

特征

仍在快速开发PathKit,因此确切API可能会变化.
主要特点是:
1,API兼容性(如直接替换)与2D路径
2,可输出到SVG/Canvas/Path2D
3,公开各种路径特效.

示例代码

npm包中的example.html,可查找如何使用PathKit这里.

应用接口

该库的主要特征是SkPath对象.可从如下创建:
1,从PathKit.FromSVGString(str)路径的SVG
2,从动词和参数PathKit.FromCmds(cmds)二维数组.
3,FromPathKit.NewPath()(将为空)
4,现有带path.copy()PathKit.NewPath(path)SkPath的副本
可导出为:
1,SVG串:path.toSVGString()
2,Path2D对象:path.toPath2D()
3,直接到2D画布环境:path.toCanvas(ctx)
4,动词和参数的二维数组:path.toCmds()

创建SkPath对象后,可如下与之交互:
1,通过Path2D操作(moveTo,lineTo,rect,arc,等)
2,与使用opPathKit.MakeFromOp(p1,p2,op)其他路径组合.
如,path1.op(path2,PathKit.PathOp.INTERSECT)会设置path1path1path2重叠(相交)所表示的区域.
PathKit.MakeFromOp(path1,path2,PathKit.PathOp.INTERSECT)将同样,但按新的SkPath对象返回.
3,使用一些(修剪,破折号,描边等)特效调整.

重要提示:离开域时,必须使用path.delete()清理创建的(SkPath,SkOpBuilder等)对象,以避免泄漏WASM堆中的内存.
这包括构造器,copy()或以"make"前缀的函数.

路径包

FromSVGString(str)

str:表示SVGPath这里的串
返回一个动作和参数SVG串相同的SkPath,如果失败,则返回null.
例:

let path = PathKit.FromSVGString('M150 0 L75 200 L225 200 Z');`path`表示一个`三角形`,出域时,记得执行`path.delete()`.
FromCmds(cmds)

cmds2D命令数组的Array<Array<Number>>,其中命令是一个动词加其参数.
返回包含列表动作和参数SkPath,如果失败,则返回null.
比多次调用.moveTo(),.lineTo()等更快.
例:

    let cmds = [[PathKit.MOVE_VERB, 0, 10],[PathKit.LINE_VERB, 30, 40],[PathKit.QUAD_VERB, 20, 50, 45, 60],];let path = PathKit.FromCmds(cmds);//`path`与用户完成路径相同//let path = PathKit.NewPath().moveTo(0, 10).lineTo(30, 40).quadTo(20, 50, 45, 60);//出域时,记得执行`path.delete()`

NewPath()

返回一个空的SkPath对象.
例:

    let path = PathKit.NewPath();path.moveTo(0, 10).lineTo(30, 40).quadTo(20, 50, 45, 60);//也可let path = new PathKit.SkPath();

(pathToCopy)新路径

pathToCopy:要复制的SkPath路径.
返回在SkPath中传递的副本的SkPath.
例:

    let otherPath = ...;let clone = PathKit.NewPath(otherPath);clone.simplify();//也可let clone = new PathKit.SkPath(otherPath);//或let clone = otherPath.copy();
MakeFromOp(pathOne, pathTwo, op)

1,pathOne,SkPath路径.
2,pathTwo,SkPath路径.
3,op,PathOp要应用的运算

返回一个给定的PathOp应用至第一个和第二个路径的结果(顺序很重要)的新的SkPath.
例:

    let pathOne = PathKit.NewPath().moveTo(0, 20).lineTo(10, 10).lineTo(20, 20).close();let pathTwo = PathKit.NewPath().moveTo(10, 20).lineTo(20, 10).lineTo(30, 20).close();let mountains = PathKit.MakeFromOp(pathOne, pathTwo, PathKit.PathOp.UNION);

用户也可执行pathOne.op(pathTwo,PathKit.PathOp.UNION);生成路径存储pathOne中,来避免分配另一个对象.

cubicYFromX(cpx1, cpy1, cpx2, cpy2, X)

cpx1,cpy1,cpx2,cpy2:控制点的坐标数字.
X:要找相应Y坐标X坐标数字.
快速求值三次缓入/缓出曲线.按单位正方形内的参数化立方曲线定义.做出以下假设:

1,pt[0]隐式{0,0}
2,pt[3]隐式{1,1}
3,pts[1,2]单位正方形内

返回给定X坐标Y坐标.

cubicPtFromT(cpx1, cpy1, cpx2, cpy2, T)

cpx1,cpy1,cpx2,cpy2控制点的坐标数字.
T数字,要查找相应(X,Y)坐标的T参数.

快速求值三次缓入/缓出曲线.按单位正方形内的参数化立方曲线定义.做出以下假设:
1,pt[0]隐式{0,0}
2,pt[3]隐式{1,1}
3,pts[1,2]单位正方形内

长度为2的数组返回给定T值(X,Y)坐标.

SkPath (object)

addPath(otherPath)

otherPath,要附加到此路径的SkPath路径

给定路径添加到此路径,然后返回此路径链接.

addPath(otherPath, transform)

otherPath,要追加到此路径的SkPath路径.
transform,在追加它之前应用至otherPathSVGMatrix转换在此.

应用转换后,把给定路径添加到此路径,然后返回此路径以链接.细节,见Path2D.addPath()这里.

addPath(otherPath, a, b, c, d, e, f)

otherPath,要追加到此路径的SkPath路径.
a,b,c,d,e,f:数字,定义附加转换前,应用至otherPath转换的SVGMatrix六个组件.

应用转换后,把给定路径添加到此路径,然后返回此路径以链接.细节,见Path2D.addPath()这里.
例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);let moreBoxes = PathKit.NewPath();// 加未转换框(i.e. at 0, 0)moreBoxes.addPath(box)// 参数填充了一个类似如下2d矩阵://     a c e//     b d f//     0 0 1//向右添加了300个点的框.addPath(box, 1, 0, 0, 1, 300, 0)//添加一个双向缩小50%的框..addPath(box, 0.5, 0, 0, 0.5, 0, 0);//现在moreBoxes附加了3个路径
addPath(otherPath, scaleX, skewX, transX, skewY, scaleY, transY, pers0, pers1, pers2)

otherPath,追加到此路径的SkPath路径.
scaleX,skewX,transX,skewY,scaleY,transY,pers0,pers1,pers2数字,仿射矩阵的九个分量,用来定义,在附加前应用至otherPath变换.
应用转换后,把给定路径添加到此路径,然后返回此路径以链接.

例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);let moreBoxes = PathKit.NewPath();moreBoxes.addPath(box)// 加未转换框(i.e. at 0, 0)// 参数填充了一个类似如下2d矩阵://     a c e//     b d f//     0 0 1//向右添加了300个点的框.addPath(box, 1, 0, 0,0, 1, 300,0, 0 ,1)//添加一个双向缩小50%的框..addPath(box, 0.5, 0,   0,0,   0.5, 0,0,   0,   1)//现在moreBoxes附加了3个路径

arc(x,y,radius,startAngle,endAngle,ccw=false)
x,y:数字,圆弧中心坐标.
radius:数字,圆弧半径.
startAngle,endAngle:数字,角度起点和终点,以弧度为单位,从正x轴顺时针测量.
ccw:布尔值,可选参数,指定是否应默认在起角尾角之间用逆时针而不是默认的顺时针绘画弧.

描述的弧添加到此弧中,然后返回此弧以链接.细节,见Path2D.arc()这里.

例:

    let path = PathKit.NewPath();path.moveTo(20, 120);.arc(20, 120, 18, 0, 1.75 * Math.PI);.lineTo(20, 120);// 路径像一个去除了1/8切片的馅饼.
arcTo(x1, y1, x2, y2, radius)

x1,y1,x2,y2数字,定义控制点坐标.
radius数字,圆弧半径.
描述的弧添加到此弧中,(如果需要,附加一行),然后返回此弧以链接.细节Path2D.arcTo().

close()closePath()

返回到当前子路径开头,然后返回此值以链接.细节,见Path2D.closePath()这里.

computeTightBounds()

返回一个表示此路径最小和最大面积SkRect.细节,见SkPath参考.

conicTo(x1, y1, x2, y2, w)

x1,y1,x2,y2:数字,定义控制点和终点坐标.
w:数字,圆锥的权重.

把描述的圆锥线添加到此值(如果需要,请附加一行),然后返回此行以链接.细节,见SkPath参考.

复制()/copy()

返回此路径的副本.

cubicTo(cp1x, cp1y, cp2x, cp2y, x, y)
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)

cp1x,cp1y,cp2x,cp2y数字,定义控制点坐标.
x,y数字,定义终点坐标

把描述的立方线添加到此值(如果需要,请附加一行),然后返回此值以链接.细节,见Path2D.bezierCurveTo这里.

dash(on, off, phase)

on,off:数字,应打开(绘画)和关闭(空白)的破折号的像素数.
phase:数字,开/关应偏移的像素数(模on+off)

对此应用虚线路径特效,然后返回此值以链接.有关视觉示例,见上面的"Dash"特效.

例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);box.dash(20, 10, 3);//box现在是一个将绘画20像素然后停止10像素的`虚线矩形`.因为相位为3,因此`第一行`不会从(0,0)开始,而是从路径(3,0)周围的3个像素开始.
ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, ccw=false)

x,y:数字,椭圆中心坐标.
radiusX,radiusY:数字,X和Y方向半径.
rotation:数字,该椭圆的弧度旋转.
startAngle,endAngle:数字,要绘画起始角和结束角,以正x轴弧度为单位.
ccw:布尔值,指定是否应在起角尾角之间逆时针而不是默认的顺时针绘画椭圆的可选参数.
把描述椭圆添加到,然后返回此椭圆以链接.细节,见Path2D.ellipse这里.

equals(otherPath)

otherPath:要比较的SkPath路径.
根据此路径是否等于otherPath返回布尔值.

getBounds()

返回表示此路径的最小和最大面积SkRect.细节,见SkPath参考.

getFillType()

根据此路径返回FillType.默认为PathKit.FillType.WINDING,但可能会随op()simplify()更改.
客户一般需要getFillTypeString(),因为可直接传递该值SVGCanvas.

getFillTypeString()

返回一个表示此路径fillTypeString.这些值为"nonzero""evenodd".
例:

    let path = ...;let ctx = document.getElementById('canvas1').getContext('2d');ctx.strokeStyle = 'green';ctx.fill(path.toPath2D(), path.getFillTypeString());
moveTo(x, y)

x,y:数字,笔应移动到的目标位置坐标.
移动笔(不绘画)到给定坐标,然后返回此坐标以链接.细节,见Path2D.moveTo这里.

lineTo(x, y)

x,y:数字,笔应移动到的目标位置坐标.
绘画一条给定坐标直线,然后返回此直线以链接.细节,见Path2D.lineTo这里.

op(otherPath,操作)

otherPath:要与this路径组合的另一条SkPath路径.
operation:应用至两个路径的PathOp操作.

用给定操作与otherPath合并到此路径中,并返回此路径以链接.
例:

    let pathOne = PathKit.NewPath().moveTo(0, 20).lineTo(10, 10).lineTo(20, 20).close();let pathTwo = PathKit.NewPath().moveTo(10, 20).lineTo(20, 10).lineTo(30, 20).close();//组合两个三角形为两座山的样子let mountains = pathOne.copy().op(pathOne, pathTwo, PathKit.PathOp.UNION);//设置`pathOne`为`pathOne`和`pathTwo`重叠的小三角形pathOne.op(pathOne, pathTwo, PathKit.PathOp.INTERSECT);//既然调用了`copy()`,记得在山上调用`delete()`.
quadTo(cpx, cpy, x, y) or quadraticCurveTo(cpx, cpy, x, y)

cpx,cpy:数字,控制点坐标.
x,y:数字,终点坐标.
用给定坐标绘画二次贝塞尔曲线,然后返回此曲线以链接.细节,见Path2D.quadraticCurveTo这里.

rect(x, y, w, h)

x,y:数字,矩形左上角坐标.
w,h:数字,矩形的宽高
在此基础上绘画一个矩形,然后返回此矩形以链接.细节,见Path2D.rect这里.

setFillType(fillType)

fillType:FillType,新的fillType.

设置路径的fillType.细节,见SkPath参考.

简化(simplify)()

设置此路径为一组描述与原始路径相同区域的不重叠的等值线.有关视觉示例,见上面的"简化"特效.

stroke(opts)

opts:包含删除的StrokeOpts选项.
给定的选项划出此路径.可用来搞各种特效.有关视觉示例,见上面的"描边","增长"和"收缩"特效.
例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);//用宽度10和圆角描边路径let rounded = box.copy().stroke({width: 10, join: PathKit.StrokeJoin.ROUND});//增长特效,即在盒子周围扩展20像素let grow = box.copy().stroke({width: 20}).op(box, PathKit.PathOp.DIFFERENCE);//收缩特效,从原图像收缩,let simplified = box.copy().simplify(); // sometimes required for complicated paths//有时`复杂`路径需要它,let shrink = box.copy().stroke({width: 15, cap: PathKit.StrokeCap.BUTT}).op(simplified, PathKit.PathOp.REVERSE_DIFFERENCE);//记得在每个副本上调用delete()!
toCanvas(ctx)

ctx:要在其上绘画路径的Canvas2DContext画布.
在传递的CanvasContext上绘画此路径.

例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);let ctx = document.getElementById('canvas1').getContext('2d');ctx.strokeStyle = 'green';ctx.beginPath();box.toCanvas(ctx);ctx.stroke();  // 也可ctx.fill()

toCmds()
返回动作和参数二维数组.细节,见PathKit.FromCmds().

toPath2D()

返回与此路径相同操作的Path2D对象.
例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);let ctx = document.getElementById('canvas1').getContext('2d');ctx.strokeStyle = 'green';ctx.stroke(box.toPath2D());
toSVGString()

返回表示基于此路径的SVGPath的一个String.
例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);let svg = document.getElementById('svg1');let newPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');newPath.setAttribute('stroke', 'green');newPath.setAttribute('fill', 'white');newPath.setAttribute('d', box.toSVGString());svg.appendChild(newPath);
transform(matr)

matrS:kMatrix,即仿射变换矩阵的九个数字中的Array<Number>.
this应用指定的转换,然后返回此值以链接.

transform(scaleX, skewX, transX, skewY, scaleY, transY, pers0, pers1, pers2)

scaleX,skewX,transX,skewY,scaleY,transY,pers0,pers1,pers2:数字,仿射变换矩阵的九个数字.
给此值应用指定的转换,然后返回此值以链接.

例:

    let path = PathKit.NewPath().rect(0, 0, 100, 100);//放大路径5倍,path.transform([5, 0, 0,0, 5, 0,0, 0, 1]);//向右移动路径`75`像素.path.transform(1, 0, 75,0, 1, 0,0, 0, 1);
trim(startT, stopT, isComplement=false)

startT,stopT:数字,[0,1]中,指示要绘画的路径的开始和停止"百分比"的值
isComplement:布尔值,在startTstopT之间的区域,是否应该绘画修剪部分的补码.

设置此路径原始路径子集,然后返回此路径以链接.有关视觉示例,见上面的"修剪"特效.
例:

    let box = PathKit.NewPath().rect(0, 0, 100, 100);box.trim(0.25, 1.0);//`box`现在是像(已删除`顶部段`)`U`的3个段.
SkOpBuilder (object)

此对象允许链接多个PathOps在一起.用

let builder = new PathKit.SkOpBuilder();

创建一个;创建时,内部状态为"空路径".记得在构建器resolve()的结果上调用delete().

add(path,operation)

path:要与给定规则组合的SkPath路径.
operation:应用至两个路径的PathOp操作.

路径和操作数添加到生成器.

make()resolve()

根据给定路径和操作数创建并返回新的SkPath.
返回路径出域时,记得在返回路径上调用.delete().

SkMatrix (struct)

SkMatrix,在C++结构和JS数组之间转换.带一个九元素一维数组,并转换它为3x32D仿射矩阵.

SkRect(struct)

SkRect使用以下所有值均为Number的键,在C++结构和JS对象之间转换:
fLeft:左上角的x坐标
fTop:左上角的y坐标.
fRight:右下角的x坐标
fBottom:右下角的y坐标

StrokeOpts(struct)

StrokeOpts使用以下键,在C++结构和JS对象之间转换:
width,路径线宽数.默认值1.
miter_limit,数字,斜接限制.默认为4,见SkPaint参考.
join,StrokeJoin要使用的联接.默认值为PathKit.StrokeJoin.MITER.
细节,见SkPaint参考.

cap,StrokeCap要使用的帽.默认值为PathKit.StrokeCap.BUTT.见SkPaint参考.

PathOp (enum)

公开以下枚举值.它们是通过其.value属性区分的常量对象.

PathKit.PathOp.DIFFERENCE
PathKit.PathOp.INTERSECT
PathKit.PathOp.REVERSE_DIFFERENCE
PathKit.PathOp.UNION
PathKit.PathOp.XOR

PathKit.MakeFromOp()SkPath.op()中使用它们.

FillType (enum)

公开以下枚举值.它们是通过其.value属性区分的常量对象.

PathKit.FillType.WINDING (also known as nonzero)
PathKit.FillType.EVENODD
PathKit.FillType.INVERSE_WINDING
PathKit.FillType.INVERSE_EVENODD

SkPath.getFillType()SkPath.setFillType()使用它们,但一般客户需要SkPath.getFillTypeString().

StrokeJoin (enum)

公开以下枚举值.它们是通过其.value属性区分的常量对象.

PathKit.StrokeJoin.MITER
PathKit.StrokeJoin.ROUND
PathKit.StrokeJoin.BEVEL

细节,见SkPaint参考.

StrokeCap (enum)

公开以下枚举值.它们是通过其.value属性区分的常量对象.

PathKit.StrokeCap.BUTT
PathKit.StrokeCap.ROUND
PathKit.StrokeCap.SQUARE

细节,见SkPaint参考.

常数

公开以下常量:

PathKit.MOVE_VERB = 0
PathKit.LINE_VERB = 1
PathKit.QUAD_VERB = 2
PathKit.CONIC_VERB = 3
PathKit.CUBIC_VERB=4
PathKit.CLOSE_VERB=5

PathKit.FromCmds()需要它.

仅测试的函数

PathKit.LTRBRect(left,top,right,bottom)
left:SkRect左上角的数字x坐标.
top:SkRect左上角的数字y坐标.
right:数字,SkRect右下角的x坐标.
bottom:数字,SkRect右下角的y坐标.

返回有给定参数SkRect对象.
SkPath.dump()
打印控制台的动词参数.仅在调度/测试中可用.

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

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

相关文章

MySQL - 多表查询

文章目录 1.聚合查询2.分组查找3.联合查询内连接外连接自连接子查询合并查询 SQL查询各关键字的执行先后顺序 总结 本文开始 1.聚合查询 聚合查询&#xff0c;使用的是聚合函数&#xff1a;count()&#xff0c;sum()&#xff0c;avg()&#xff0c;max()&#xff0c;min coun…

Hdoop学习笔记(HDP)-Part.05 Yum源配置

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

mysql常用命令行代码

连接到 MySQL 服务器&#xff1a; mysql -u your_username -p替换 your_username 为你的 MySQL 用户名。系统会提示你输入密码。 退出 MySQL 命令行&#xff1a; EXIT;或者按 Ctrl D。 显示所有数据库&#xff1a; SHOW DATABASES;选择数据库&#xff1a; USE your_database…

计算机网络扫盲(1)——因特网

一、概述 因特网是一个世界范围的计算机网络&#xff0c;即它是一个互联了遍及全世界数十亿计算设备的网络。大家对此应该并不陌生&#xff0c;我们身边有着不计其数的计算机设备被接入了因特网&#xff0c;如今计算机网络这个术语似乎已经有点过时了&#xff0c;用因特网的术语…

CRM系统是怎样帮助销售流程自动化的?

销售业绩是衡量企业经营的重要指标&#xff0c;也是销售人员一直要达成的目标。销售业绩能否提高取决于销售人员的能力、客户服务水平&#xff0c;还需要借助有效的工具。CRM系统就是这样的一款软件。企业如何提高销售业绩&#xff1f;不妨试试CRM销售流程自动化。 CRM如何实现…

什么是新一代智能拓客系统?

新一代智能拓客系统是一种采用先进的人工智能技术&#xff0c;为企业提供高效拓展客户的工具。它基于大数据分析&#xff0c;可以快速识别潜在客户&#xff0c;并针对他们的需求进行个性化的营销活动。 新一代智能拓客系统主要特点有&#xff1a; 自动化&#xff1a;新一代智…

【C语言:数据在内存中的存储】

文章目录 1.整数在内存中的存储1.1整数在内存中的存储1.2整型提升 2.大小端字节序2.1什么是大小端2.2为什么有大小端之分 3.整数在内存中的存储相关题目题目一题目二题目三题目四题目五题目六题目七 4.浮点数在内存中的存储4.1浮点数存的过程4.2浮点数取得过程 在这之前呢&…

openGauss学习笔记-137 openGauss 数据库运维-例行维护-检查和清理日志

文章目录 openGauss学习笔记-137 openGauss 数据库运维-例行维护-检查和清理日志137.1 检查操作系统日志137.2 检查openGauss运行日志137.3 清理运行日志 openGauss学习笔记-137 openGauss 数据库运维-例行维护-检查和清理日志 日志是检查系统运行及故障定位的关键手段。建议按…

Windows下安全认证机制

NTLM&#xff08;NT LAN Manager&#xff09; NTLM协议是在Microsoft环境中使用的一种身份验证协议&#xff0c;它允许用户向服务器证明自己是谁&#xff08;挑战&#xff08;Chalenge&#xff09;/响应&#xff08;Response&#xff09;认证机制&#xff09;&#xff0c;以便…

TA-Lib学习研究笔记(八)——Momentum Indicators 中

TA-Lib学习研究笔记&#xff08;八&#xff09;——Momentum Indicators 中 Momentum Indicators 动量指标&#xff0c;是最重要的股票分析指标&#xff0c;能够通过数据量化分析价格、成交量&#xff0c;预测股票走势和强度&#xff0c;大部分指标都在股票软件中提供。 11. …

对el-select封装成组件使用

效果与直接使用el-select一样&#xff0c;多处用el-select显得代码冗余就进行了封装 效果图&#xff1a; el-select封装&#xff1a; <template><div class"my-select"><el-selectv-model"person.modelValue":placeholder"placehold…

Linux中的文件IO

文章目录 C语言文件操作系统文件I/O接口介绍 open函数返回值文件描述符fd0 & 1 & 2文件描述符的分配规则 重定向使用 dup2 系统调用 FILE理解文件系统理解硬链接软链接acm 动态库和静态库静态库与动态库生成静态库生成动态库&#xff1a; C语言文件操作 先来段代码回顾…

DBeaver 社区版(免费版)下载、安装、解决驱动更新出错问题

DBeaver 社区版&#xff08;免费版&#xff09; DBeaver有简洁版&#xff0c;企业版&#xff0c;旗舰版&#xff0c;社区版&#xff08;免费版&#xff09;。除了社区版&#xff0c;其他几个版本都是需要付费的&#xff0c;当然相对来说&#xff0c;功能也要更完善些&#xff…

pandas.get_dummies函数:把离散信息转换成onehot矩阵

pandas.get_dummies函数用来把可以分类信息转换成0和1矩阵。 函数参数 def get_dummies(data,prefix=None,prefix_sep="_",dummy_na: bool = False,columns=None,sparse: bool

进程间通信 消息队列 函数用法介绍

Linux的消息队列是一种在进程间传递消息的数据结构。它允许一个进程将一条消息放入队列&#xff0c;而其他进程可以从队列中取出并处理消息。消息队列在实现进程间通信(IPC)方面非常有用。 IPC对象 IPC(InterProcess Communication) 对象是活动在内核级别的一种进程间通信的工…

Fiddler抓包工具之fiddler设置过滤

fiddler设置过滤 基本的过滤操作流程以百度为例 步骤&#xff1a; 1、右侧高级工具栏点击Filters》勾选Use Filters》选择Show only Internet Hosts和Show only the following Hosts》在文本框中输入host地址 2、点击Changes not yet saved》再点击Actions》Run Filterset …

Azure Machine Learning - 在 Azure AI 搜索中创建全文查询

Azure AI搜索中如果要为全文搜索生成查询&#xff0c;本文提供了设置请求的步骤。 本文还介绍了查询结构&#xff0c;并说明了字段属性和语言分析器如何影响查询结果。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&a…

RISC-V_WCH系列微控器软件体系云端快速架构

1 概述 RISC-V内核的微控器MCU&#xff0c;正在以更高的性价比&#xff0c;快速取代传统的各类ARM系列微控制处理器。 针对常用的芯成RISC-V内核的泌恒WCH系列微控器MCU&#xff0c;推出了&#xff1a;RISC-V_WCH系列微控器软件体系快速架构云平台。只要以身份证号码做用户名…

C#拼夕夕自动化登录,电商网页自动化操作。WebView2

单纯靠WebView2是没办法通过JS实现自动登录操作的&#xff0c;包括浏览器插件&#xff0c;都不行&#xff0c;因为大公司对反爬机制控制的还是挺严格。 下面是实现效果&#xff0c;私信我&#xff0c;咨询解决方案。 20231202_153912 C#有偿Q群&#xff1a;927860652博客仅为…

交换综合实验

目录 一、实验拓扑 二、实验要求 三、实验步骤 1、链路聚合&#xff08;配置Eth-trunk&#xff09; 2、配置vlan&#xff08;创建划分vlan&#xff0c;配置trunk干道&#xff09; 3、MSTP配置 4、VRRP配置 5、DHCP配置 6、vlan互通 7、NAT配置&#xff08;做ACL&#…