关于easyx头文件
一、窗口创建
(1)几种创建方式
#include<easyx.h>//easyx的头文件
#include<iostream>
using namespace std;int main()
{//创建一个500*500的窗口//参数为:长度,宽度,是否显示黑框(无参为不显示黑框,有这个参数则显示)initgraph(500, 500);//不显示dox黑屏initgraph(500, 500, EX_SHOWCONSOLE);//显示dox黑屏//生成框没有关闭按钮initgraph(500, 500, EX_NOCLOSE);//生成框没有最小化按钮initgraph(500, 500, EX_NOMINIMIZE);//如果要实现多个特性的显示框,第三个参数用|连接initgraph(500, 500, EX_SHOWCONSOLE | EX_NOCLOSE | EX_NOMINIMIZE);getchar();//用于实现窗口的暂停return 0;
}
(2)窗口颜色调整
int main()
{//创建窗口(有黑框)initgraph(500, 500, EX_SHOWCONSOLE);//设置窗口颜色setbkcolor(WHITE);//清除原窗口颜色,以显示新的白色cleardevice();getchar();
}
//库中颜色// Color constant
#define BLACK 0
#define BLUE 0xAA0000
#define GREEN 0x00AA00
#define CYAN 0xAAAA00
#define RED 0x0000AA
#define MAGENTA 0xAA00AA
#define BROWN 0x0055AA
#define LIGHTGRAY 0xAAAAAA
#define DARKGRAY 0x555555
#define LIGHTBLUE 0xFF5555
#define LIGHTGREEN 0x55FF55
#define LIGHTCYAN 0xFFFF55
#define LIGHTRED 0x5555FF
#define LIGHTMAGENTA 0xFF55FF
#define YELLOW 0x55FFFF
#define WHITE 0xFFFFFF
int main()
{//创建窗口(有黑框)initgraph(500, 500, EX_SHOWCONSOLE);//设置窗口颜色//在画图中查找色号可以实现想要颜色的填充,用RGB函数即可setbkcolor(RGB(21, 134, 41));//清除原窗口颜色,以显示新的颜色cleardevice();getchar();
}
RGB号的找法:在画图软件中找
(3)坐标体系
二、基本图形绘制
(1)线条
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//绘制一个点(x,y,颜色)putpixel(200, 100, RED);//绘制一条线(先设置好,再绘制)//设置线条颜色setlinecolor(BLUE);//设置线条样式(样式,粗细)setlinestyle(PS_SOLID, 3);//开始绘制(起点x,起点y,终点x,终点y)line(0, 0, 500, 500);//跟据显示框绘制line(0, 0, getwidth(), getheight());getchar();return 0;
}
库中线条类型 :
/* Pen Styles */
#define PS_SOLID 0
#define PS_DASH 1 /* ------- */
#define PS_DOT 2 /* ....... */
#define PS_DASHDOT 3 /* _._._._ */
#define PS_DASHDOTDOT 4 /* _.._.._ */
#define PS_NULL 5
#define PS_INSIDEFRAME 6
#define PS_USERSTYLE 7
#define PS_ALTERNATE 8
#define PS_STYLE_MASK 0x0000000F#define PS_ENDCAP_ROUND 0x00000000
#define PS_ENDCAP_SQUARE 0x00000100
#define PS_ENDCAP_FLAT 0x00000200
#define PS_ENDCAP_MASK 0x00000F00#define PS_JOIN_ROUND 0x00000000
#define PS_JOIN_BEVEL 0x00001000
#define PS_JOIN_MITER 0x00002000
#define PS_JOIN_MASK 0x0000F000#define PS_COSMETIC 0x00000000
#define PS_GEOMETRIC 0x00010000
#define PS_TYPE_MASK 0x000F0000#define AD_COUNTERCLOCKWISE 1
#define AD_CLOCKWISE 2
(2)矩形
#include<easyx.h>//easyx的头文件
#include<iostream>
using namespace std;int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//绘制一个矩形边框//先调一下矩形线的颜色setlinecolor(RED);//开始绘制(左上角x,左上角y,右下角x,右下角y)rectangle(100, 0, 100 + 50, 0 + 50);//绘制一个填充颜色的矩形边框setlinecolor(RED);rectangle(210, 0, 210 + 50, 0 + 50);//设置填充的颜色setfillcolor(YELLOW);//把颜色填到矩形中fillrectangle(210, 0, 210 + 50, 0 + 50);//绘制一个无边框但填充颜色的矩形solidrectangle(320, 0, 320 + 50, 0 + 50);//设置填充的颜色setfillcolor(YELLOW);//可以看到,绘制无边框矩形时如果前面定义过填充颜色,会进行自动填充//绘制一个圆角矩形//开始绘制(左上角x,左上角y,右下角x,右下角y,角的椭圆a,角的椭圆b)roundrect(430, 0, 430 + 50, 0 + 50, 10, 10);//给圆角矩形填充颜色fillroundrect(430, 0, 430 + 50, 0 + 50, 10, 10);//给圆角矩形去边框solidroundrect(430, 0, 430 + 50, 0 + 50, 10, 10);getchar();return 0;
}
关于圆角矩形角的椭圆示意图:
(3)圆形
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setlinecolor(RED);//绘制一个圆(圆心x,圆心y,半径r)circle(100, 100, 50);//填充颜色setfillcolor(YELLOW);fillcircle(100, 100, 50);//去边框solidcircle(100, 100, 50);getchar();return 0;
}
(4)椭圆
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setlinecolor(RED);//绘制一个椭圆(参数和矩形一样,只是会变成椭圆)ellipse(100, 0, 200, 50);//当然也可以进行颜色填充和去边操作getchar();return 0;
}
(5)库中更多图形的定义
// Drawing related functionsCOLORREF getpixel(int x, int y); // Get pixel color
void putpixel(int x, int y, COLORREF color); // Set pixel colorvoid line(int x1, int y1, int x2, int y2); // Draw a linevoid rectangle (int left, int top, int right, int bottom); // Draw a rectangle without filling
void fillrectangle (int left, int top, int right, int bottom); // Draw a filled rectangle with a border
void solidrectangle(int left, int top, int right, int bottom); // Draw a filled rectangle without a border
void clearrectangle(int left, int top, int right, int bottom); // Clear a rectangular regionvoid circle (int x, int y, int radius); // Draw a circle without filling
void fillcircle (int x, int y, int radius); // Draw a filled circle with a border
void solidcircle(int x, int y, int radius); // Draw a filled circle without a border
void clearcircle(int x, int y, int radius); // Clear a circular regionvoid ellipse (int left, int top, int right, int bottom); // Draw an ellipse without filling
void fillellipse (int left, int top, int right, int bottom); // Draw a filled ellipse with a border
void solidellipse(int left, int top, int right, int bottom); // Draw a filled ellipse without a border
void clearellipse(int left, int top, int right, int bottom); // Clear an elliptical regionvoid roundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a rounded rectangle without filling
void fillroundrect (int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a filled rounded rectangle with a border
void solidroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Draw a filled rounded rectangle without a border
void clearroundrect(int left, int top, int right, int bottom, int ellipsewidth, int ellipseheight); // Clear a rounded rectangular regionvoid arc (int left, int top, int right, int bottom, double stangle, double endangle); // Draw an arc
void pie (int left, int top, int right, int bottom, double stangle, double endangle); // Draw a sector without filling
void fillpie (int left, int top, int right, int bottom, double stangle, double endangle); // Draw a filled sector with a border
void solidpie(int left, int top, int right, int bottom, double stangle, double endangle); // Draw a filled sector without a border
void clearpie(int left, int top, int right, int bottom, double stangle, double endangle); // Clear a rounded rectangular regionvoid polyline (const POINT *points, int num); // Draw multiple consecutive lines
void polygon (const POINT *points, int num); // Draw a polygon without filling
void fillpolygon (const POINT *points, int num); // Draw a filled polygon with a border
void solidpolygon(const POINT *points, int num); // Draw a filled polygon without a border
void clearpolygon(const POINT *points, int num); // Clear a polygon regionvoid polybezier(const POINT *points, int num); // Draw three square Bezier curves
void floodfill(int x, int y, COLORREF color, int filltype = FLOODFILLBORDER); // Fill the area
(6)折线的绘制
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setlinecolor(RED);setlinestyle(PS_SOLID, 3);//POINT的实质的结构体POINT points[] = { {10,10},{50,50},{100,50},{220,350} };polyline(points, 4);getchar();return 0;
}
三、文字操作
(1)基本操作
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//画个填充颜色的带框矩形setlinecolor(RED);rectangle(100, 100, 300, 200);setfillcolor(YELLOW);fillrectangle(100, 100, 300, 200);//写文字// 注意:凡是easy文字相关函数的调用,字符串一定要写L进行字符集的转化//设置文字大小与类型(宽度,高度(0为自适应),字体)settextstyle(50, 0, L"华文楷体 常规");//设置文字颜色settextcolor(BLUE);//设置背景模式,以防止文字遮盖背景setbkmode(TRANSPARENT);//开写outtextxy(110, 120, L"HELLOW!");getchar();return 0;
}
文体查找:
三种解决字符集转换的方法:
(2)将int类型的变量输出为屏幕文字
注意:这个地方使用了第三项来改变字符集
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//画个填充颜色的带框矩形setlinecolor(RED);rectangle(100, 100, 300, 200);setfillcolor(YELLOW);fillrectangle(100, 100, 300, 200);//写文字// 注意:凡是easy文字相关函数的调用,字符串一定要写L进行字符集的转化//设置文字大小与类型(宽度,高度(0为自适应),字体)settextstyle(50, 0, "华文楷体 常规");//设置文字颜色settextcolor(BLUE);//设置背景模式,以防止文字遮盖背景setbkmode(TRANSPARENT);//开写int score = 66;char str[100] = "";//三个参数(字符串地址,)sprintf_s(str, "score:%d", score);outtextxy(110, 120, str);getchar();return 0;
}
(3)文字在矩形居中显示
int main()
{//纯白窗口创建initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//变量定义int rx = 100;int ry = 100;int rw = 200;int rh = 100;//画个填充颜色的带框矩形setlinecolor(RED);rectangle(rx, ry, rx + rw, ry + rh);setfillcolor(YELLOW);fillrectangle(rx, ry, rx + rw, ry + rh);//textwidth=tw textheight=thsettextstyle(30, 0, "华文楷体 常规");int hspace = (rw - textwidth("HELLOW!")) / 2;int vspace = (rh - textheight("HELLOW!")) / 2;settextcolor(BLUE);setbkmode(TRANSPARENT);outtextxy(rx + hspace, ry + vspace, "HELLOW!");getchar();return 0;
}
四、关于消息
(1)基本使用
定义消息结构体,peekmessage是获取消息,返回一个bool值,如果获取到了就是真,它有三个参数,第一个是消息的地址,第二个是获取的目标,第二第三都有默认值,图中的EX_MOUSE是鼠标的意思,msg结构体有message成员存放消息信息,如果这个信息是鼠标左键被按下(WM_LBUTTONDOWN)就打印按下了鼠标左键
int main()
{//创建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定义消息结构体变量ExMessage msg = { 0 };//套入死循环,便于多次检测消息while (1){//获取消息(消息地址,控制目标(这里是鼠标))if (peekmessage(&msg, EX_MOUSE)){//(msg.message可以访问消息类型)switch (msg.message){case WM_LBUTTONDOWN: // 左键按下printf("左键按下 \n");break;case WM_RBUTTONDOWN: // 右键按下printf("右键按下 \n");break;case WM_MBUTTONDOWN: // 中键按下printf("中键按下 \n");break;case WM_MOUSEWHEEL: // 滚轮滚动printf("滚轮滚动 \n");break;case WM_LBUTTONDBLCLK: // 左键双击printf("左键双击 \n");break;}}}return 0;
}
库中的控制目标:
库中的消息类型(可以在帮助文档中查找):
打印点击位置和滚轮方向(+120是前,-120是后)
int main()
{//创建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定义消息结构体变量ExMessage msg = { 0 };//套入死循环,便于多次检测消息while (1){//获取消息(消息地址,控制目标(这里是鼠标))if (peekmessage(&msg, EX_MOUSE)){//(msg.message可以访问消息类型)switch (msg.message){case WM_LBUTTONDOWN: // 左键按下printf("左键按下 pos(%d,%d)\n", msg.x, msg.y);break;case WM_RBUTTONDOWN: // 右键按下printf("右键按下 pos(%d,%d)\n", msg.x, msg.y);break;case WM_MBUTTONDOWN: // 中键按下printf("中键按下 pos(%d,%d)\n", msg.x, msg.y);break;case WM_MOUSEWHEEL: // 滚轮滚动printf("滚轮滚动 dir(%d)\n", msg.wheel);break;case WM_LBUTTONDBLCLK: // 左键双击printf("左键双击pos(%d,%d)\n", msg.x, msg.y);break;}}}return 0;
}
结合键盘
int main()
{//创建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定义消息结构体变量ExMessage msg = { 0 };//套入死循环,便于多次检测消息while (1){//获取消息(这次获取的是键盘消息)if (peekmessage(&msg, EX_KEY)){//按键按下if (msg.message == WM_KEYDOWN){printf("按键按下\n");}//按键抬起if (msg.message == WM_KEYUP){printf("按键抬起\n");}}}return 0;
}
检测具体按下了哪个键
int main()
{//创建窗口initgraph(500, 500, EX_SHOWCONSOLE);//定义消息结构体变量ExMessage msg = { 0 };//套入死循环,便于多次检测消息while (1){//获取消息(这次获取的是键盘消息)if (peekmessage(&msg, EX_KEY)){//按键按下if (msg.message == WM_KEYDOWN){printf("按键按下\n");//具体是哪个键按下switch (msg.vkcode){case VK_UP:printf("上键按下\n");break;case VK_DOWN:printf("下键按下\n");break;case VK_LEFT:printf("左键按下\n");break;case VK_RIGHT:printf("右键按下\n");break;//用大写字符代表键盘上的具体某个键case 'A':printf("AAA\n");break;case 'C':printf("CCC\n");break;}}//按键抬起if (msg.message == WM_KEYUP){printf("按键抬起\n");}}}return 0;
}
(2)画个移动圆形
#include<easyx.h>//easyx的头文件
#include<windows.h>
#include<iostream>
using namespace std;int main()
{//创建窗口initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//圆形属性int x = 50;int y = 50;int r = 30;int speed = 3;int vx = 0;int vy = 0;//开启双缓冲避免闪屏(一般是开始绘图时就要开启)BeginBatchDraw();//定义消息结构体变量ExMessage msg = { 0 };//套入死循环,便于多次检测消息while (1){//清除上一帧的内容cleardevice();//获取消息(这次获取的是键盘消息)if (peekmessage(&msg, EX_KEY)){//按键按下if (msg.message == WM_KEYDOWN){switch (msg.vkcode){case VK_UP:vy = -1;break;case VK_DOWN:vy = 1;break;case VK_LEFT:vx = -1;break;case VK_RIGHT:vx = 1;break;}}else if (msg.message == WM_KEYUP){switch (msg.vkcode){case VK_UP:vy = 0;break;case VK_DOWN:vy = 0;break;case VK_LEFT:vx = 0;break;case VK_RIGHT:vx = 0;break;}}}//更新小球位置x += speed * vx;y += speed * vy;//绘制小球setlinecolor(RED);circle(x, y, r);setfillcolor(BLUE);fillcircle(x, y, 30);//加载双缓冲FlushBatchDraw();//这个为了控制帧率,不写会导致小球直接飞掉Sleep(10);}//结束双缓冲EndBatchDraw();return 0;
}
(3)按钮制作
五、帧率控制
(1)这个的问题是出现闪屏,没有控制数字改变的速度
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);int score = 0;char str[50] = "";while (1){sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);//用于刷新分数,防止分数重叠cleardevice();outtextxy(20, 20, str);getchar();}return 0;
}
(2)加入双缓冲防止闪屏
1.这是第一种,局部使用
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);int score = 0;char str[50] = "";while (1){sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);BeginBatchDraw();cleardevice();outtextxy(20, 20, str);EndBatchDraw();getchar();}return 0;
}
2.这是第二种,全局使用
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);BeginBatchDraw();int score = 0;char str[50] = "";while (1){sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);cleardevice();outtextxy(20, 20, str);//这个写在绘制后FlushBatchDraw();getchar();}EndBatchDraw();return 0;
}
(3)加入帧率控制部分
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();setbkmode(TRANSPARENT);//60FPS定义//clock_t就是longconst clock_t FPS = 1000 / 60;//1s/60帧 每一帧应该花费的时间int starttime = 0;//用于保存一次开始时的时间int freamtime = 0;//用于进行一次循环的时间BeginBatchDraw();int score = 0;char str[50] = "";while (1){//clock返回的时程序进行到现在的时间starttime = clock();sprintf_s(str, "Score:%d", score++);settextcolor(BLACK);cleardevice();outtextxy(20, 20, str);FlushBatchDraw();freamtime = clock() - starttime;if (freamtime > 0){//暂停使单次时间达到60FPSSleep(FPS - freamtime);}getchar();}EndBatchDraw();return 0;
}
六、图片相关
(1)首先要有把图片保存到工程相关的地方
(2)基本操作
int main()
{//这里的窗口大小和图片属性的大小相同initgraph(2512, 1373, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//定义图片变量IMAGE img;//加载图片(1.绝对路径 2.相对路径)//1. loadimage(&img, "D:\\代码\\界面库学习\\kon.jpg");//2. loadimage(&img,"界面库学习/kon.jpg");相对路径和main.cpp在同一个文件夹里面//分隔符要么是\\,要么是///一般推荐第二种,便于代码移植loadimage(&img, "D:\\代码\\界面库学习\\界面库学习\\kon.png");//输出图片//前两个参数是图片左上角的坐标putimage(0, 0, &img);getchar();return 0;
}
(2)原图和掩码图
上面的例子有一个明显的缺点,图片的张贴会覆盖背景
int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();//定义图片变量IMAGE img;loadimage(&img, "D:\\代码\\界面库学习\\界面库学习\\ghost-down.jpg");//输出图片putimage(100, 100, &img);getchar();return 0;
}
把原图和它的掩码图同时加载,就可以避免背景覆盖问题
#include<easyx.h>//easyx的头文件
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();BeginBatchDraw();//定义图片变量IMAGE img;IMAGE img_mask;loadimage(&img_mask, "D:\\代码\\界面库学习\\界面库学习\\ghost-mask.jpg");loadimage(&img, "D:\\代码\\界面库学习\\界面库学习\\ghost-down.jpg");//输出图片(先张贴掩码图,在张贴原图)putimage(100, 100, &img_mask, NOTSRCERASE);putimage(100, 100, &img, SRCINVERT);FlushBatchDraw();getchar();EndBatchDraw();return 0;
}
(4)动态过程
#include<easyx.h>//easyx的头文件
#include<windows.h>
#include<iostream>
#include<time.h>
using namespace std;int main()
{initgraph(500, 500, EX_SHOWCONSOLE);setbkcolor(WHITE);cleardevice();int FPS = 1000 / 60;int starttime = 0;int freamtime = 0;BeginBatchDraw();//定义图片变量IMAGE img1;IMAGE img2;IMAGE img3;loadimage(&img1, "D:\\代码\\界面库学习\\界面库学习\\ghost1-down.jpg");loadimage(&img2, "D:\\代码\\界面库学习\\界面库学习\\ghost2-down.jpg");loadimage(&img3, "D:\\代码\\界面库学习\\界面库学习\\ghost3-down.jpg");IMAGE image[3] = { img1,img2,img3 };while (1){for (int i = 0; i < 3; i++){//先清空屏幕,再贴图cleardevice();putimage(100, 100, image + i);starttime = clock();FlushBatchDraw();freamtime = clock() - starttime;if (freamtime > 0){Sleep(FPS - freamtime);}FlushBatchDraw();getchar();}}EndBatchDraw();return 0;
}
(5)精灵表动画
七、音乐播放
(1)基本操作
#include<easyx.h>
//下面这三串代码是播放音乐必要的
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//
#include<iostream>
using namespace std;int main()
{//先open再play,只播放一次mciSendString("open D:\\代码\\界面库学习\\界面库学习\\Start.mp3", NULL, 0, NULL);mciSendString("play D:\\代码\\界面库学习\\界面库学习\\Start.mp3", NULL, 0, NULL);getchar();return 0;
}
(2)简便写法与调整音量大小
#include<easyx.h>
//下面这三串代码是播放音乐必要的
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//
#include<iostream>
using namespace std;int main()
{//先open再play,只播放一次//简便写法mciSendString("open D:\\代码\\界面库学习\\界面库学习\\Start.mp3 alias bgm", NULL, 0, NULL);mciSendString("play bgm", NULL, 0, NULL);//调整音量大小mciSendString("setaudio bgm volume to 50", NULL, 0, NULL);getchar();return 0;
}
(3)播放错误检查
#include<easyx.h>
//下面这三串代码是播放音乐必要的
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
//
#include<iostream>
using namespace std;int main()
{//先open再play,只播放一次//简便写法mciSendString("open D:\\代码\\界面库学习\\界面库学习\\Start.mp3 alias bgm", NULL, 0, NULL);mciSendString("play bgm", NULL, 0, NULL);//调整音量大小MCIERROR ret = mciSendString("setaudio bgm volume to 50", NULL, 0, NULL);//通过返回值确认是否播放成功if (ret != 0){//获取错误信息char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));}getchar();return 0;
}
(5)函数封装
可以尝试写一个参数只有路径字符串的播放音乐的函数
这个是示例
(6)用于播放音效的函数
这个函数只能播放.wav格式的音乐
相关文章:

关于easyx头文件
一、窗口创建 (1)几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为:长度,宽度,是否显示黑框(无参为不…...
Java 中执行命令并使用指定配置文件的最佳实践
在Java开发中,有时需要从Java应用程序中执行系统命令,并使用指定的配置文件来控制这些命令的行为。本文将详细介绍在Java中执行命令并使用指定配置文件的最佳实践,包括如何设置环境变量、重定向输入输出以及处理可能出现的异常。 一、基本实…...

django入门-orm数据库操作
一:下载数据库依赖项mysqlclient pip install mysqlclient 二:django配置文件配置数据库链接 路径:mysite2\mysite2\settings.py DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: data, # 数据库名称USER: root, …...
食品电商突围战!品融电商全平台代运营,助您抢占天猫京东抖音红利!
食品电商突围战!品融电商全平台代运营,助您抢占天猫京东抖音红利! 一、食品电商的黄金时代:机遇与挑战并存 随着消费升级和线上渗透率的持续攀升,食品行业正迎来前所未有的发展机遇。2023年ÿ…...
Termux下如何使用MATLAB
实际上,termux 目前无法运行MATLAB,但是可以运行MATLAB的平替octave ,可以完全在终端环境运行,方便运算和查看模型拟合结果等,完全兼容MATLAB命令。 食用方法: //pkg install wget wget https://its-poin…...

STM32外部中断(EXTI)以及旋转编码器的简介
一、外部中断机制概述 中断是指当主程序执行期间出现特定触发条件(即中断源)时,CPU将暂停当前任务,转而执行相应的中断服务程序(ISR),待处理完成后恢复原程序的运行流程。该机制通过事件驱动…...

双擎驱动:华为云数字人与DeepSeek大模型的智能交互升级方案
一、技术融合概述 华为云数字人 华为云数字人,全称:数字内容生产线 MetaStudio。数字内容生产线,提供数字人视频制作、视频直播、智能交互、企业代言等多种服务能力,使能千行百业降本增效。另外,数字内容生产线&#…...
Unity Version Control UVC报错:Not connected. Trying to re-connect…
问题背景 今天备份项目的时候遇到了这个问题,起因是Unity停用了原始的Plastic SCM的项目管理功能,我使用新的Unity Version Control系统时遇到了无法新建workspace的问题,即使新建之后进入Unity也无法连接到仓库,点击重试也无反应…...
场景题-1
场景题-1 订单到期关闭 1、DelayQueue 无界阻塞队列,用于放置实现了Delayed接口的对象,基于PriorityQueue实现,可用于实现在指定的延迟时间之后处理元素。订单创建后放入队列中,然后使用一个常驻任务不停地执行扫描取出超时订单…...
Java复习Day26
Lambda表达式简介 Lambda表达式是Java 8的重要特性,允许使用简洁的表达式代替功能接口。它类似于方法,包含参数列表和执行主体(可以是表达式或代码块)。Lambda可以视为匿名内部类的语法糖,也被称为闭包。 优点 代码…...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.5 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第5章析因设计引导5.7节思考题5.5 R语言解题。主要涉及方差分析,正态假设检验,残差分析,交互作用图。 dataframe <-data.frame( wrapc(17,20,12,9,…...
阿里云百炼全解析:一站式大模型开发平台的架构与行业实践
目录 大模型开发范式的革新平台核心架构与技术解析全生命周期开发工作流企业级安全与合规体系行业应用场景与最佳实践未来演进与技术展望1. 大模型开发范式的革新 1.1 从碎片化到平台化的演进 传统大模型开发面临三大核心挑战:算力管理复杂、工具链割裂、安全合规风险高。阿…...

字节新出的MCP应用DeepSearch,有点意思。
大家好,我是苍何。 悄悄告诉你个事,昨天我去杭州参加字节火山方舟举办的开发者见面会了,你别说,还真有点刘姥姥进大观园的感觉🐶 现场真实体验完这次新发布的产品和模型,激动的忍不住想给大家做一波分享。…...
Agentic Voice Stack 热门项目
以下是当前在 Agentic Voice Stack 工作流领域较为热门的开源项目,涵盖语音交互、多模态控制、工作流编排等核心能力,综合多个权威来源整理而成: 🎙️ 一、语音交互层(Speech-to-Speech & Text-to-Spe…...
机器学习在多介质环境中多污染物空间预测的应用研究
机器学习在多介质环境中多污染物空间预测的应用研究 1. 引言 1.1 研究背景与意义 随着工业化和城市化进程加速,环境中多种污染物的共存已成为全球性环境问题。重金属(如铅、汞、镉)、有机污染物(如多环芳烃、农药残留)和新兴污染物(如微塑料、药品残留)在空气、水体、…...

期货反向跟单运营逻辑推导思路
期货反向跟单运营逻辑推导思路 很多刚接触期货反向跟的朋友第一印象就是:这绝对是一个完美的策略,在认知不到位的情况下就开始运营,结果就是赔的稀里哗啦。然后告诉身边所有的人,期货反向跟单不靠谱。 这就是一个很有意思的事情&…...

使用 HTML + JavaScript 实现图片裁剪上传功能
本文将详细介绍一个基于 HTML 和 JavaScript 实现的图片裁剪上传功能。该功能支持文件选择、拖放上传、图片预览、区域选择、裁剪操作以及图片下载等功能,适用于需要进行图片处理的 Web 应用场景。 效果演示 项目概述 本项目主要包含以下核心功能: 文…...
Redis 缓存粒度如何控制?缓存整个对象还是部分字段?
控制 Redis 缓存粒度,即决定是缓存整个对象还是对象的部分字段,是一个需要在性能、内存使用、数据一致性、更新复杂性和开发成本之间进行权衡的决策。没有绝对的“最佳”方案,需要根据具体业务场景来选择。 以下是两种主要策略及其优缺点&am…...

【灵动Mini-F5265-OB】vscode+gcc工程创建、下载、调试
【前言】 【灵动Mini-F5265-OB】在官方的例程中提供了mdk、IAR的开发环境,使用起来非常方便。有位大佬也提供了一个gcc的示例,但是我使用vscode的keil插件进行工程创建,但是提示pack是对不上的。所以我决定重新创建我的vscode来创建开发环境。…...
程序设计实践期末考试模拟题(1)
1、排列论文 #include<bits/stdc.h> using namespace std; const int N105; vector<int>g[N]; int a[N]; int n,m; int flag; int topSort(){queue<int>q;for(int i1;i<n;i){if(a[i]0){q.push(i);}}int cnt0;flag1;while(!q.empty()){int tq.front();q.p…...

现代语言模型中的分词算法全解:从基础到高级
基础分词(Naive Tokenization) 最简单的分词方式是基于空格将文本拆分为单词。这是许多自然语言处理(NLP)任务中常用的一种分词方法。 text "Hello, world! This is a test." tokens text.split() print(f"Tok…...
HttpServletResponse 对象用来做什么?
HttpServletResponse 对象是由 Servlet 容器创建并传递给 Servlet 的 service() 方法(以及间接传递给 doGet(), doPost() 等方法)的。它的核心作用是让 Servlet 能够向客户端(通常是浏览器)发送 HTTP 响应。 通过 HttpServletRes…...

第十三章 Java基础-特殊处理
文章目录 1.包和final2.权限修饰符和代码块3.抽象类1.包和final 2.权限修饰符和代码块 3.抽象类...
MTK的Download agent是什么下载程序?
MTK(MediaTek)的Download Agent(DA)是一种与MTK设备进行通信的协议代理程序,在MTK设备的固件下载与烧录过程中起着关键作用,以下为你展开介绍: 下载原理 在MTK平台的固件下载过程中,DA会被加载到MTK设备的内部RAM中运行。它负责配置Flash及RAM的时序,从而建立起PC端…...
ArcGIS Pro 3.4 二次开发 - 地图创作 2
环境:ArcGIS Pro SDK 3.4 + .NET 8 文章目录 ArcGIS Pro 3.4 二次开发 - 地图创作 224 注记24.1 创建标注构造工具24.2 通过属性更新注释文本。注意:TEXTSTRING 注释属性必须存在24.3 旋转或移动标注24.4 获取注释文本图形24.5 获取注记的轮廓几何24.6 获取标注的掩膜几何25 …...

【操作系统原理08】文件管理
文章目录 零.大纲一.文件管理0.大纲1.文件管理1.1 **文件属性**1.2 文件内部数据组织1.3 文件之间的组织1.4操作系统提供功能1.5 文件在外存存放 二.文件的逻辑结构0.大纲1.无结构文件2.有结构文件 三.文件目录0.大纲1.文件控制块2.目录结构3.索引节点(FCB改进) 四.文件共享0.大…...

图论学习笔记 5 - 最小树形图
我们不废话,直接进入正题:最小树形图,一个名字看起来很高级的东西。 声明:为了便于理解,可能图片数量会有亿点点多。图片尺寸可能有的较大。 概念 最小树形图的英文是 Directed Minimum Spanning Tree。 相信懂英文…...
VueUse:组合式API实用函数全集
VueUse 完全学习指南:组合式API实用函数集合 🎯 什么是 VueUse? VueUse 是基于 组合式API(Composition API) 的实用函数集合,为Vue 3开发者提供了丰富的可复用逻辑功能。它通过提供大量预构建的组合函数&…...

《自动驾驶轨迹规划实战:Lattice Planner实现避障路径生成(附可运行Python代码)》—— 零基础实现基于离散优化的避障路径规划
《自动驾驶轨迹规划实战:Lattice Planner实现避障路径生成(附可运行Python代码)》 —— 零基础实现基于离散优化的避障路径规划 一、为什么Lattice Planner成为自动驾驶的核心算法? 在自动驾驶的路径规划领域,Lattice…...
嵌入式笔试题+面试题
一、嵌入式笔试题 1) int a; 2) int *a; 3) int **a; 4) int a[10]; 5) int *a[10]; 6) int (*a)[10]; 7) int (*a)(int); 8) int (*a[10])(int); (1) 一个整型数 (2) 一个指向整型数的指针 (3) 一个指向指针的的指针,它指向的指针是指向一个整型数 (4) 一个有10个…...