【SkiaSharp绘图14】SKCanvas方法详解(三)URL注释、按顶点绘制、 是否裁切区域之外、旋转、缩放、倾斜、平移、保存/恢复画布

文章目录

  • SKCanvas方法
    • DrawUrlAnnotation 绘制URL注释
    • DrawVertices 按顶点绘制
    • Flush 立即绘制
    • QuickReject 判断区域是否在裁切区域之外
    • ResetMatrix重置矩阵
    • Restore、RestoreToCount
    • RotateDegrees按角度旋转画布
    • RotateRadians按弧度旋转画布
    • SaveLayer保存并新建图层
    • Scale 缩放画布
    • SetMatrix 设置矩阵
    • Skew 倾斜
    • Translate 平移

SKCanvas方法

DrawUrlAnnotation 绘制URL注释

public void DrawUrlAnnotation (SkiaSharp.SKRect rect, SkiaSharp.SKData value);
public SkiaSharp.SKData DrawUrlAnnotation (SkiaSharp.SKRect rect, string value);

创建一个矩形区域为为可点击的URL注释。(在不支持的后端,此语句将被忽略)

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);using (var stream = File.OpenWrite(@"Images\test.pdf"))
using (var doc = SKDocument.CreatePdf(stream, 72))
using (var pdfCanvas = doc.BeginPage(600, 600))
using (var paint = new SKPaint())
{paint.TextSize = 18;paint.Color = SKColors.LightGreen;paint.IsStroke = true;var text = $"https://www.csdn.net/";pdfCanvas.DrawText(text, 20, 200, paint);var bbox = new SKRect();paint.MeasureText(text, ref bbox);pdfCanvas.Translate(20, 200);pdfCanvas.DrawRect(bbox,paint);pdfCanvas.DrawUrlAnnotation(bbox, text);doc.EndPage();doc.Close();
}
  1. 绘制文本网址
  2. 测量文本的区域
  3. 绘制区域矩形,并生成URL注释
    DrawUrlAnnotation

DrawVertices 按顶点绘制

public void DrawVertices (SkiaSharp.SKVertexMode vmode, SkiaSharp.SKPoint[] vertices, SkiaSharp.SKPoint[] texs, SkiaSharp.SKColor[] colors, ushort[] indices, SkiaSharp.SKPaint paint);
public void DrawVertices (SkiaSharp.SKVertexMode vmode, SkiaSharp.SKPoint[] vertices, SkiaSharp.SKPoint[] texs, SkiaSharp.SKColor[] colors, SkiaSharp.SKBlendMode mode, ushort[] indices, SkiaSharp.SKPaint paint);
public void DrawVertices (SkiaSharp.SKVertexMode vmode, SkiaSharp.SKPoint[] vertices, SkiaSharp.SKPoint[] texs, SkiaSharp.SKColor[] colors, SkiaSharp.SKPaint paint);
public void DrawVertices (SkiaSharp.SKVertexMode vmode, SkiaSharp.SKPoint[] vertices, SkiaSharp.SKColor[] colors, SkiaSharp.SKPaint paint);

通过顶点来定义几何形状,可以控制每个顶点的颜色和纹理坐标。

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);// 定义顶点位置
var vertices = new SKPoint[]
{new SKPoint(100, 100),new SKPoint(200, 80),new SKPoint(150, 200),new SKPoint(300, 100),new SKPoint(400, 60),new SKPoint(350, 200)
};// 定义每个顶点的颜色
var colors = new SKColor[]
{new SKColor(255,0,0,128),new SKColor(255,255,0,128),new SKColor(255,255,255,128),new SKColor(0,255,0,128),new SKColor(0,255,255,128),new SKColor(0,0,255,128)
};// 创建 SKPaint 对象
using (var paint = new SKPaint())
{var modes=Enum.GetValues(typeof(SKVertexMode)) as SKVertexMode[];paint.TextSize = 18;paint.IsAntialias = true;foreach (var per  in modes){paint.StrokeWidth = 1;canvas.DrawVertices(per, vertices, colors, paint);canvas.DrawText($"SKVertexMode:{per}", 450, 150, paint);paint.StrokeWidth = 5;paint.StrokeCap = SKStrokeCap.Round;canvas.DrawPoints(SKPointMode.Points, vertices, paint);for(int i = 0; i < vertices.Length; i++){var pt=vertices[i];canvas.DrawText($"{i}", pt, paint);}canvas.Translate(0, 200);}
}

定义6个顶点、6个颜色,分别用三种方式绘制。
DrawVertices

  1. Triangles: 将每三个顶点作为一个独立的三角形来绘制。
  2. TriangleStrip: 将顶点组合作为一个三角形条带绘制,每相邻的三个顶点组成一个三角形。
  3. TriangleFan: 将顶点组合作为一个三角形扇绘制,第一个顶点作为扇的中心点,后续顶点与这个中心点以及前一个顶点一起构成一个三角形。

Flush 立即绘制

public void Flush ();

用于将所有挂起的绘制命令立即提交到目标设备。

  1. 确保绘制完成:在复杂的绘制操作之后调用 Flush 可以确保所有操作都已提交并完成。
  2. 减少延迟:在需要即时反馈或减少绘制延迟的情况下,调用 Flush 可以让绘制结果立即生效。
  3. 同步绘制:在与其他绘制或图形系统交互时,Flush 可以确保 SkiaSharp 的绘制操作已完成,以便其他系统可以访问最新的绘制结果。

QuickReject 判断区域是否在裁切区域之外

public bool QuickReject (SkiaSharp.SKPath path);
public bool QuickReject (SkiaSharp.SKRect rect);

快速判断指定的路径或矩形,在当前矩阵变换后是否完全位于当前裁切区域之外。

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);using (var paint = new SKPaint())
{var rectA = new SKRect(50, 50, 250, 150);var rectB = new SKRect(450, 50, 650, 150);paint.IsStroke = true;paint.StrokeWidth = 10;if (!canvas.QuickReject(rectA)){canvas.DrawRect(rectA, paint);}if (!canvas.QuickReject(rectB)){canvas.DrawRect(rectB, paint);}canvas.ClipRect(new SKRect(400, 0, 800, 800));   paint.StrokeWidth = 1;paint.Color = SKColors.Red;if (!canvas.QuickReject(rectA)){canvas.DrawRect(rectA, paint);}if (!canvas.QuickReject(rectB)){canvas.DrawRect(rectB, paint);}
}

1.定义两个矩形,判断是否在裁切区域之外,可能在区域之内,则绘制
2.重新定义裁切区域,判断原来的两个矩形是否在裁切区域之外,绘制在裁切区域之内的矩形。
QuickReject

ResetMatrix重置矩阵

public void ResetMatrix ();

重置矩阵。

Restore、RestoreToCount

public void Restore ();
public void RestoreToCount (int count);

恢复画布到上一或指定状态。
示例见下图。

RotateDegrees按角度旋转画布

public void RotateDegrees (float degrees);
public void RotateDegrees (float degrees, float px, float py);

绕原点或指定点旋转一个角度(正:顺时针,负:逆时针)

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);using (var paint = new SKPaint())
{var index = 1;paint.TextSize = 18;paint.Color = SKColors.Red;paint.IsAntialias = true;paint.IsStroke = true;var dstX = 300;var dstY = 100;canvas.DrawLine(0, 0, dstX, dstY, paint);canvas.DrawText($"{index} Before RotateDegrees", dstX, dstY, paint);canvas.Save();paint.Color = SKColors.Blue;canvas.RotateDegrees(30);index++;canvas.DrawLine(0, 0, dstX, dstY, paint);canvas.DrawText($"{index} After RotateDegrees(30)", dstX, dstY, paint);canvas.Restore();paint.Color = SKColors.Red;var centerPt = new SKPoint(300, 400);var rect = new SKRect(centerPt.X - 100, centerPt.Y - 50, centerPt.X + 100, centerPt.Y + 50);canvas.DrawRect(rect, paint);index++;canvas.DrawText($"Rect{index} Before RotateDegrees", centerPt,paint);var saveCount = canvas.SaveCount;canvas.Save();paint.Color = SKColors.Blue;canvas.RotateDegrees(-30, centerPt.X, centerPt.Y);canvas.DrawRect(rect, paint);index++;canvas.DrawText($"Rect{index} Before RotateDegrees(-30,{centerPt.X},{centerPt.Y})", centerPt, paint);index++;canvas.DrawText($"{index} SaveCount:{canvas.SaveCount}", 400, 500, paint);canvas.RestoreToCount(saveCount);paint.Color = SKColors.Red;index++;canvas.DrawText($"{index} SaveCount:{canvas.SaveCount}", 400, 500, paint);
}

1.从原点画一条线段
2.旋转画布后,再画一条相同的线段
3.恢复画布状态
4.在指定点绘制一个矩形
5.画布线指定点旋转后,再绘制一个矩形
RotateDegrees

RotateRadians按弧度旋转画布

public void RotateRadians (float radians, float px, float py);
public void RotateRadians (float radians);

绕原点或指定,按弧度旋转。(是不是有点多余了,弧度和角度提供一个就可以了吧?)

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);using (var paint = new SKPaint())
{var index = 1;paint.TextSize = 18;paint.Color = SKColors.Red;paint.IsAntialias = true;paint.IsStroke = true;var dstX = 300;var dstY = 100;canvas.DrawLine(0, 0, dstX, dstY, paint);canvas.DrawText($"{index} Before RotateRadians", dstX, dstY, paint);canvas.Save();paint.Color = SKColors.Blue;canvas.RotateRadians((float)(Math.PI/6));index++;canvas.DrawLine(0, 0, dstX, dstY, paint);canvas.DrawText($"{index} After RotateRadians(Math.PI/6)", dstX, dstY, paint);canvas.Restore();paint.Color = SKColors.Red;var centerPt = new SKPoint(300, 400);var rect = new SKRect(centerPt.X - 100, centerPt.Y - 50, centerPt.X + 100, centerPt.Y + 50);canvas.DrawRect(rect, paint);index++;canvas.DrawText($"Rect{index} Before RotateRadians", centerPt, paint);var saveCount = canvas.SaveCount;canvas.Save();paint.Color = SKColors.Blue;canvas.RotateRadians(-(float)(Math.PI / 6), centerPt.X, centerPt.Y);canvas.DrawRect(rect, paint);index++;canvas.DrawText($"Rect{index} After RotateRadians(-(Math.PI / 6),{centerPt.X},{centerPt.Y})", centerPt, paint);
}

RotateRadians

SaveLayer保存并新建图层

public int SaveLayer ();
public int SaveLayer (SkiaSharp.SKPaint paint);
public int SaveLayer (SkiaSharp.SKRect limit, SkiaSharp.SKPaint paint);

用于将当前的绘图状态保存到栈中,并创建一个新的图层(layer)。在新的图层上进行的所有绘制操作都会被暂时保存在这个图层上,而不是直接绘制在画布上。

  1. 临时绘制:在图层上进行临时绘制操作,然后再将图层合并回主画布。这对于需要多次更新和合成的复杂绘制操作非常有用。
  2. 混合模式:使用特定的混合模式或透明度进行绘制。图层上的所有绘制操作都可以以特定的混合模式或透明度应用到主画布上。
  3. 效果应用:在图层上应用滤镜或效果,然后将图层合并回主画布。这样可以避免在主画布上直接应用效果,保留原始绘图的灵活性。
var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);using (var paint = new SKPaint())
{paint.Color = SKColors.Red.WithAlpha(128);canvas.DrawCircle(200, 200, 100, paint);using(var paintB=new SKPaint()){paintB.Color = SKColors.Blue.WithAlpha(128);canvas.SaveLayer(new SKRect(280,120,470,280),paintB);canvas.DrawCircle(375,200,100, paintB);canvas.Restore();canvas.DrawCircle(288, 300, 100, paint);}
}

SaveLayer

Scale 缩放画布

public void Scale (SkiaSharp.SKPoint size);
public void Scale (float s);
public void Scale (float sx, float sy);
public void Scale (float sx, float sy, float px, float py);

指定水平、垂直和缩放点后对画布进行缩放。

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);using (var paint = new SKPaint())
{paint.IsStroke = true;paint.StrokeWidth = 5;paint.Color = SKColors.Red.WithAlpha(128);canvas.DrawCircle(100, 100, 50, paint);canvas.Save();canvas.Scale(3F);paint.Color = SKColors.Blue.WithAlpha(128);canvas.DrawCircle(100, 100, 50, paint);canvas.Restore();canvas.Save();canvas.Scale(2F, 2F, 100, 100);paint.Color = SKColors.Green.WithAlpha(128);canvas.DrawCircle(100, 100, 50, paint);
}
  1. 绘制一个圆
  2. 将画布按原点放大3倍后,再次绘制圆
  3. 将画布按原始圆心放大2倍后,再次绘制圆。

Scale

SetMatrix 设置矩阵

public void SetMatrix (SkiaSharp.SKMatrix matrix);

设置画布矩阵。

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);
using (var paint = new SKPaint())
{paint.IsStroke = true;paint.StrokeWidth = 2;paint.TextSize = 18;paint.Color = SKColors.Red;paint.Typeface = SKTypeface.FromFamilyName("宋体");paint.TextAlign = SKTextAlign.Center;for (int degree = 0; degree <= 330; degree += 30){//绕中心旋转30var matrix = SKMatrix.CreateRotationDegrees(degree, info.Width / 2F, info.Height / 2F);canvas.SetMatrix(matrix);var centerPt = new SKPoint(info.Width / 2F + 200, info.Height / 2F);canvas.DrawCircle(centerPt, 50, paint);canvas.DrawText($"{degree}°", centerPt, paint);}}

1.通过设置画布的矩阵,绕中心点,每30度画一个圆

SetMatrix

Skew 倾斜

public void Skew (SkiaSharp.SKPoint skew);
public void Skew (float sx, float sy);

设置水平与垂直倾斜。

var canvas = e.Surface.Canvas;
var info = e.Info;
canvas.Clear(SKColors.White);
using (var paint = new SKPaint())
{paint.IsStroke = true;paint.IsAntialias = true;paint.StrokeWidth = 1;paint.TextSize = 36;var centerPt = new SKPoint(info.Width / 2F, info.Height / 2F);var lineLen = 200F;paint.Color = SKColors.Red;var degree = 30F;//canvas.DrawArc(new SKRect(centerPt.X - lineLen, centerPt.Y - lineLen, centerPt.X + lineLen, centerPt.Y + lineLen), 270 - degree, degree, true, paint);canvas.DrawArc(new SKRect(centerPt.X - 50, centerPt.Y - 50, centerPt.X + 50, centerPt.Y + 50), 270 - degree, degree, true, paint);var radian = degree * Math.PI / 180;float sin = (float)Math.Sin(radian);float cos = (float)Math.Cos(radian);float dstX = centerPt.X + lineLen * cos;float dstY = centerPt.Y + lineLen * sin;//注意原点移至中心canvas.Translate(centerPt.X, centerPt.Y);// 应用倾斜变换 (例如,X 轴倾斜 30 度,Y 轴倾斜 0 度)float skewX = (float)Math.Tan(degree * Math.PI / 180); // 将角度转换为弧度float skewY = 0;canvas.Skew(skewX, skewY);paint.Color = SKColors.Blue;canvas.DrawRect(SKRect.Create(200, 200), paint);canvas.DrawText($"SkewX = {degree}°", 0, 0, paint);//倾斜后的坐标//x'=x+y*skewX//y'=y+x*skewY
}

1.在画布中心绘制一个倾斜30度的文本

Skew
注意倾斜角度的不同,文本的倾斜方向不同。
正:文本向左倾斜。
负:文本向右倾斜。

Translate 平移

public void Translate (SkiaSharp.SKPoint point);
public void Translate (float dx, float dy);

将画布原点进行水平和垂直平移。

[System.ComponentModel.Description("SKCanvas.Translate平移")]
public void OnPaintSurface14_10(object sender, SkiaSharp.Views.Desktop.SKPaintGLSurfaceEventArgs e)
{var canvas = e.Surface.Canvas;var info = e.Info;infoWidth= info.Width;infoHeight= info.Height;canvas.Clear(SKColors.White);using (var paint = new SKPaint()){paint.IsStroke = true;paint.IsAntialias = true;paint.StrokeWidth = 1;paint.Color = SKColors.Green;var radius = 50;if (timer == null){timer = new System.Windows.Forms.Timer();timer.Interval = 1000 / 24;timer.Tick += (o, t) =>{TranslateX += xStep;if (TranslateX >= infoWidth - radius){xStep = -xStep;TranslateX = infoWidth - radius;}else if (TranslateX <= radius){xStep = -xStep;TranslateX = radius;}TranslateY += yStep;if (TranslateY >= infoHeight - radius){yStep = -yStep;TranslateY = infoHeight - radius;}else if (TranslateY <= radius){yStep = -yStep;TranslateY = radius;}this.TNTechImageBox.Invalidate();};timer.Start();}canvas.Translate(TranslateX, TranslateY);canvas.DrawCircle(0,0, radius, paint);}
}
float infoWidth = 0;
float infoHeight = 0;
float TranslateX = 100;
float TranslateY = 100;
float xStep = 5;
float yStep = 5;

使用平移,绘制一个圆,看上去遇到画布四周时,进行反弹。
Translate

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

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

相关文章

Python协作运动机器人刚体力学解耦模型

&#x1f3af;要点 &#x1f3af;腿式或固定式机器人模型 | &#x1f3af;网格、点云和体素网格碰撞检测 | &#x1f3af;正反向运动学和动力学 | &#x1f3af;机器人刚体力学计算 | &#x1f3af;编辑参考系姿势和路径 | &#x1f3af;软件接口实体机器人模拟 | &#x1f3a…

分子AI预测赛Task2笔记

下面所述比较官方的内容都来自官方文档 ‍‌⁠‌‍​​​‌​​⁠​​​​​&#xfeff;​​​&#xfeff;‍‬​​‍⁠‍‍​​‬​&#xfeff;‌​​​‌‍‬​​​​​​‍‌Task2&#xff1a;赛题深入解析 - 飞书云文档 (feishu.cn) 赛题背景 强调了人工智能在科研领域&…

苹果电脑废纸篓数据被清空了,有什么方法可以恢复吗?

使用电脑的用户都知道&#xff0c;被删除的文件一般都会经过回收站&#xff0c;想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样&#xff0c;但是“回收站”在mac电脑显示为“废纸篓”。 苹果电脑废纸篓数据被清空了&#xff0c;有什么方法可以恢复吗&am…

java反射和注解

反射 获取class对象的三种方法 ①&#xff1a;Class.forName("全类名"); ②&#xff1a;类名.class ③&#xff1a;对象.getclass(); 代码样例 package com.ithema;public class Main {public static void main(String[] args) throws ClassNotFoundException {//第…

基于Canvas的Html5多时区动态时钟实战

目录 前言 一、关于Canvas技术 1、Canvas是什么 2、Canvas的属性及渲染特性 二、Canvas动态多时区展示 1、新建html页面 2、创建Canvas对象 3、绘制所有的时钟 总结 前言 出差旅行相信大家一定会住酒店&#xff0c;大家在酒店的前台进行预订的时候&#xff0c;是不是都…

centos执行yum相关命令报错的可能原因

文章目录 1. 执行yum命令是报下面一大帕拉2. 安装某个包报错&#xff0c;找不到这个包 1. 执行yum命令是报下面一大帕拉 最后一行报错&#xff0c;在repo文件中找不到空baseurl&#xff1a;xxx / x86_64 执行这行命令把这个找不到的 xxx 禁掉即可sudo yum-config-manager --di…

【项目日记(三)】搜索引擎-搜索模块

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.前言2.项目回顾3.搜索流程3.1分词3.2触发3.3去重3.4排序3.5包装 4.总结 1.前言 在前…

虚拟机USB——解决每次插U盘都得选择连接到主机还是虚拟机问题

虚拟机USB——解决每次插U盘都得选择连接到主机还是虚拟机问题 1.编辑–>首选项–> 2.如果想每次插U盘都连接到主机就选“将设备连接到主机” 如果想每次插U盘都进行选择&#xff0c;就选择“询问要执行的操作”

在 Mac 上使用 本地 LLM 文本终结

我们可使用本地大型语言模型&#xff0c;如Mistral、Llama等&#xff0c;来给文本做总结&#xff0c;相比在线的 Kimi &#xff0c;ChatGPT&#xff0c; 我们不用担心数据泄露&#xff0c;因为整个操作都是在本地电脑完成的。 我们用 ollama 举例 首先安装 ollama https://ol…

数组-二分查找

二分查找 leetcode704 /*** param {number[]} nums* param {number} target* return {number}*/ var search function(nums, target) {let left 0, right nums.length - 1;while (left < right) {const mid Math.floor((right - left) / 2) left;const num nums[mid]…

SpringSecurity中文文档(体系结构).md

体系结构&#xff08;Architecture&#xff09; 本节讨论基于 Servlet 的应用程序中 Spring Security 的高级体系结构。我们将在参考文献的身份验证、授权和防止利用部分中构建这种高层次的理解。 过滤器的综述 &#xff08;A Review of Filters&#xff09; Spring Securit…

实现WebSocket聊天室功能

实现WebSocket聊天室功能 什么是WebSocket&#xff1f;WebSocket的工作原理服务器端实现客户端实现 在现代Web开发中&#xff0c;实时通信已经变得越来越重要。传统的HTTP协议由于其无状态和单向通信的特点&#xff0c;无法很好地满足实时通信的需求。而WebSocket协议则应运而生…

【讨论C++继承】

讨论C继承 继承定义继承方式和访问限定符 基类和派生类的赋值转换继承中的作用域派生类的默认成员函数继承和友元继承和静态成员菱形继承虚拟继承 继承是面向对象程序设计中&#xff0c;使代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展。 继…

【ONLYOFFICE】| 桌面编辑器从0-1使用初体验

目录 一. &#x1f981; 写在前面二. &#x1f981; 在线使用感受2.1 创建 ONLYOFFICE 账号2.2 编辑pdf文档2.3 pdf直接创建表格 三. &#x1f981; 写在最后 一. &#x1f981; 写在前面 所谓桌面编辑器就是一种用于编辑文本、图像、视频等多种自媒体的软件工具&#xff0c;具…

算法训练营day24--93.复原IP地址 +78.子集 +90.子集II

一、93.复原IP地址 题目链接&#xff1a;https://leetcode.cn/problems/restore-ip-addresses/ 文章讲解&#xff1a;https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1fA4y1o715 1.1 初…

d3dcompiler_47.dll缺失怎么修复?d3dcompiler_47.dll修复使用说明

d3dcompiler_47.dll是一个重要的系统文件&#xff0c;属于MicrosoftWindows操作系统中Direct3D的一部分&#xff0c;它主要负责处理在Windows上运行的应用程序和游戏中的3D图形编程。这个DLL文件是“DirectX”的一项组成部分&#xff0c;DirectX是一套核心技术&#xff0c;用于…

13-Django项目--文件上传

目录 前端展示 路由: 数据库字段: 函数视图: 前端展示 {% extends "index/index.html" %}{% block content %}<div class"container"><input type"button" id"btnAdd" value"上传荣耀" class"btn btn-succ…

Oracle 集群的守护进程

ohas&#xff1a;主要用于守护cluster ware进程&#xff0c;在单节点建立集群的时候&#xff0c;没有crs&#xff0c;只有ohas、cluster ware GPnP&#xff1a;管理clusterware的配置信息&#xff0c;放在本地磁盘上 crs&#xff1a;管理clusterware中的资源&#xff0c;数据库…

成功解决ES高亮内容引起的字段显示不一致问题

在处理搜索引擎&#xff08;如Elasticsearch&#xff09;结果时&#xff0c;常见需求之一是对用户搜索的关键词进行高亮显示&#xff0c;这有助于用户快速识别搜索结果为何与其查询相关。但在实际应用中&#xff0c;如果处理不当&#xff0c;直接使用高亮片段可能会导致原始数据…

A股站不稳3000点让人稀罕不已啊

今天的A股&#xff0c;让人稀罕不已&#xff0c;你知道是为什么吗&#xff1f;盘面出现2个重要信号&#xff0c;一起来看看&#xff1a; 1、今天两市冲了下3000点&#xff0c;第一个主题炒作的热点终于出现了&#xff0c;税改方向的行情发酵&#xff0c;并带动着其他改革相关方…