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

MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发

文章目录

  • CRgn类简介与开发
    • CRgn类简介
    • CRgn类区域管理开发
    • CRgn类区域管理与不规则形状的选取
  • 封装CMemoryDC类并应用开发
    • CMemoryDC.h
    • 封装CMemoryDC开发游戏透明动画
      • CFlashDlg.h
      • CFlashDlg.cpp
    • 封装CMemoryDC开发游戏动画
  • 附录
    • 四大窗口CDC派生类

CRgn类简介与开发

CRgn类简介

CRgn类是MFC(Microsoft Foundation Classes)中的一个图形区域类。该类用于创建和操作图形区域,可以表示各种形状的区域,如矩形、椭圆、多边形等。

class CRgn : public CGdiObject
{
public:static CRgn* PASCAL FromHandle(HRGN hRgn);operator HRGN() const;// 封装的特点是没有使用Overload重载函数,结构体就是XXXIndirectCRgn();
//创建矩形区域BOOL CreateRectRgn(int x1, int y1, int x2, int y2);BOOL CreateRectRgnIndirect(LPCRECT lpRect);
//创建圆形区域BOOL CreateEllipticRgn(int x1, int y1, int x2, int y2);BOOL CreateEllipticRgnIndirect(LPCRECT lpRect);
//多边形BOOL CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode);BOOL CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts,int nCount, int nPolyFillMode);
//圆角矩形BOOL CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3);
//BOOL CreateFromPath(CDC* pDC);BOOL CreateFromData(const XFORM* lpXForm, int nCount,const RGNDATA* pRgnData);// 修改矩形void SetRectRgn(int x1, int y1, int x2, int y2);void SetRectRgn(LPCRECT lpRect);
//混合int CombineRgn(const CRgn* pRgn1, const CRgn* pRgn2, int nCombineMode);int CopyRgn(const CRgn* pRgnSrc);
//判断区域完全一样BOOL EqualRgn(const CRgn* pRgn) const;
//判断一个点是否在区域内BOOL PtInRegion(int x, int y) const;BOOL PtInRegion(POINT point) const;
//保持形状不变偏移int OffsetRgn(int x, int y);int OffsetRgn(POINT point);
//框图int GetRgnBox(LPRECT lpRect) const;BOOL RectInRegion(LPCRECT lpRect) const;int GetRegionData(LPRGNDATA lpRgnData, int nCount) const;// Implementationvirtual ~CRgn();
};
CRgn类的混合功能:
int CombineRgn(    CRgn* pRgn1,    CRgn* pRgn2,    int nCombineMode  );RGN_AND   交集
RGN_COPY   拷贝
RGN_DIFF 不同
RGN_OR   并集
RGN_XOR   异或

CRgn类区域管理开发

CRgnDlg.h

#pragma once
class CCRgnDlg : public CDialogEx
{
// 构造CDC m_dc;CRect m_rect;
}

CRgnDlg.cpp

BOOL CCRgnDlg::OnInitDialog(){CDialogEx::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_LOGO);BITMAP bm;bmp.GetBitmap(&bm);m_rect.SetRect(0,0, bm.bmWidth,bm.bmHeight );m_dc.CreateCompatibleDC(NULL);m_dc.SelectObject(&bmp);SetIcon(m_hIcon, TRUE);			// 设置大图标SetIcon(m_hIcon, FALSE);		// 设置小图标return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
//透明 一个去掉不要的区域进行显示  透明度(半透明)
void CCRgnDlg::OnPaint(){CPaintDC dc(this); // 用于绘制的设备上下文	CRgn rgn;  //输出区域管理  dc.FillSolidRect(CRect(10, 10, 700, 400), RGB(0, 255, 0)); //填充了一块背景区域CRect rect;rect = m_rect;rect.OffsetRect(50, 0);//rgn.CreateEllipticRgn(0, 0, m_rect.right, m_rect.bottom); //圆形区域管理rgn.CreateEllipticRgn(rect.left,rect.top, rect.right, rect.bottom);dc.SelectObject(&rgn);//dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY); //对图片的空白区域操作dc.BitBlt(50, 0, m_rect.Width(), m_rect.Height(), &m_dc, 0, 0, SRCCOPY);
}

在这里插入图片描述

CircleRgnDlg.h

#pragma once
class CCircleRgnDlg : public CDialogEx
{
// 构造CDC m_dc;CRect m_rect;
public:afx_msg LRESULT OnNcHitTest(CPoint point);
};

CircleRgnDlg.cpp

BOOL CCircleRgnDlg::OnInitDialog(){CDialogEx::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_LOGO);BITMAP bm;bmp.GetBitmap(&bm);m_rect.SetRect(0, 0, bm.bmWidth, bm.bmHeight);SetWindowPos(NULL, 0, 0, m_rect.Width(), m_rect.Height(), SWP_NOMOVE | SWP_NOZORDER);m_dc.CreateCompatibleDC(NULL);m_dc.SelectObject(&bmp);CRgn rgn;rgn.CreateEllipticRgnIndirect(m_rect);SetWindowRgn(rgn, FALSE);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void CCircleRgnDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
}LRESULT CCircleRgnDlg::OnNcHitTest(CPoint point)
{return HTCAPTION;
}

在这里插入图片描述

CRgn类区域管理与不规则形状的选取

CCircleRgnDlg.h

class CCircleRgnDlg : public CDialogEx
{
// 构造CDC m_dc;CRect m_rect;
public:afx_msg LRESULT OnNcHitTest(CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};

CCircleRgnDlg.cpp

BOOL CCircleRgnDlg::OnInitDialog(){CDialogEx::OnInitDialog();CBitmap bmp;bmp.LoadBitmap(IDB_LOGO);BITMAP bm;bmp.GetBitmap(&bm);m_rect.SetRect(0, 0, bm.bmWidth, bm.bmHeight);SetWindowPos(NULL, 0, 0, m_rect.Width(), m_rect.Height(), SWP_NOMOVE | SWP_NOZORDER);m_dc.CreateCompatibleDC(NULL);m_dc.SelectObject(&bmp);/*CRgn rgn;rgn.CreateEllipticRgnIndirect(m_rect);SetWindowRgn(rgn, FALSE);*/return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
//CRgn r, r1, r2;
//r.CreateEllipticRgn(20, 20, 500, 400);
//dc.SelectObject(&r);
//dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
//
//POINT pts[] = { {482,192},{568,302},{322,538},{123,357},{251,192},{360,320} };
//r1.CreatePolygonRgn(pts, _countof(pts), ALTERNATE);
//
//r2.CreateRectRgn(0, 0, 0, 0);
//
//r2.CombineRgn(&r, &r1, RGN_AND);
//r2.CombineRgn(&r, &r1, RGN_XOR);
//dc.SelectObject(&r2);
//dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY);
void CCircleRgnDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文CRgn r,r1;r.CreateEllipticRgn(20, 20, 500, 400);POINT pts[] = {{482,192},{568,302},{322,538},{123,357},{251,192},{360,320}};r1.CreatePolygonRgn(pts, _countof(pts), ALTERNATE);r.CombineRgn(&r, &r1, RGN_XOR);dc.SelectObject(&r);CRect rect;r.GetRgnBox(rect);//框图要考虑如何恢复到之前图dc.BitBlt(0, 0, m_rect.right, m_rect.bottom, &m_dc, 0, 0, SRCCOPY); 
	BITMAP bm;dc.GetCurrentBitmap()->GetBitmap(&bm); //获取当前选中的位图对象,并将其信息存储在bm结构中。r.DeleteObject();r.CreateRectRgn(0, 0, bm.bmWidth, bm.bmHeight);dc.SelectObject(&r);dc.SelectStockObject(NULL_BRUSH); //绘制图形时使用的画刷对象设置为无画刷,即不填充图形dc.Rectangle(rect);
}
void CCircleRgnDlg::OnLButtonDown(UINT nFlags, CPoint point){ CRgn r, r1, r2;r.CreateEllipticRgn(20, 20, 500, 400);POINT pts[] = { {482,192},{568,302},{322,538},{123,357},{251,192},{360,320} };r1.CreatePolygonRgn(pts, _countof(pts), ALTERNATE);r.CombineRgn(&r, &r1, RGN_XOR);if (r.PtInRegion(point)){AfxMessageBox(_T("你选择了"));}CDialogEx::OnLButtonDown(nFlags, point);
}

在这里插入图片描述

封装CMemoryDC类并应用开发

CMemoryDC.h

/* 内存DC类简介:
1、BOOL LoadBitmap(UINT nBitmapID,CDC* pDC = NULL)	 从资源中按照,按位图ID加载位图
2、BOOL LoadFile(LPCTSTR sFile, CDC* pDC = NULL)	从exe外部加载图片(调用LoadImage)
3、BOOL Create(int cx, int cy, CDC* pDC = NULL)		创建空白位图(默认是全黑)4、总共有4种构造函数,包含以上3种还有空构造:
CMemoryDC(UINT nBitmapID)//从资源按照位图编号来加载
CMemoryDC(LPCTSTR sFile, CDC* pDC = NULL)//从exe外部加载
CMemoryDC(int cx, int cy, CDC* pDC=NULL)//指定高宽创建空白位图5、void MakeRgn(CRgn& r,COLORREF col)				生成透明区域
6、int GetWidth() const		int GetHeight() const	方便地获取图片高宽:
7、透明显示:BitTrans和StrecthTrans		*/
#pragma once
#include "resource.h"
class CMemoryDC :public CDC{CSize m_size;
public:CMemoryDC();int GetWidth() const{return m_size.cx;}int GetHeight() const{return m_size.cy;}CSize GetSize() const	{return m_size;}
	void BitTrans(int nXDest,		// 目标起点Xint nYDest,		// 目标起点Yint nWidthDest,	// 目标宽度int nHeightDest,// 目标高度CDC* pDC,		// 目标DCint nXSrc,		// 来源起点Xint nYSrc,		// 来源起点YCOLORREF crTrans// 透明色){CMemoryDC dcImage(nWidthDest, nHeightDest, pDC);//临时DCCBitmap bmpMask;bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);       // 创建单色掩码位图CDC dcMask;//掩码DC dcMask.CreateCompatibleDC(pDC);dcMask.SelectObject(bmpMask);//将载入位图的内存DC中的位图,拷贝到临时DC中dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);// 设置临时DC的透明色dcImage.SetBkColor(crTrans);//掩码DC的透明区域为白色其它区域为黑色dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);//临时DC透明区域为黑色,其它区域保持不变dcImage.SetBkColor(RGB(0, 0, 0));dcImage.SetTextColor(RGB(255, 255, 255));dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);// 目标DC透明部分保持屏幕不变,其它部分变成黑色pDC->SetBkColor(RGB(255, 255, 255));pDC->SetTextColor(RGB(0, 0, 0));pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);}void StretchTrans(int nXDest,			// 目标起点Xint nYDest,			// 目标起点Yint nWidthDest,     // 目标宽度int nHeightDest,    // 目标高度CDC* pDC,			// 目标DCint nXSrc,			// 来源起点Xint nYSrc,			// 来源起点Yint nWidthSrc,		// 来源宽度int nHeightSrc,		// 来源高度COLORREF crTrans	// 透明色){CMemoryDC dcImage(nWidthDest, nHeightDest, pDC);//临时DCCBitmap bmpMask;// 创建单色掩码位图bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);CDC dcMask;dcMask.CreateCompatibleDC(pDC);dcMask.SelectObject(bmpMask);// 将载入位图的内存DC中的位图,拷贝到临时DC中if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);elsedcImage.StretchBlt(0, 0, nWidthDest, nHeightDest,this, nXSrc, nYSrc, nWidthSrc, nHeightSrc, SRCCOPY);// 设置临时DC的透明色dcImage.SetBkColor(crTrans);//掩码DC的透明区域为白色其它区域为黑色dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);//临时DC透明区域为黑色,其它区域保持不变dcImage.SetBkColor(RGB(0, 0, 0));dcImage.SetTextColor(RGB(255, 255, 255));dcImage.BitBlt(0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);// 目标DC透明部分保持屏幕不变,其它部分变成黑色pDC->SetBkColor(RGB(255, 255, 255));pDC->SetTextColor(RGB(0, 0, 0));pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);pDC->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);}
	BOOL Create(int cx, int cy, CDC* pDc = NULL){	//创建空位图if (!CreateCompatibleDC(NULL))return FALSE;CBitmap bmp;if (pDc)	{if (!bmp.CreateCompatibleBitmap(pDc, cx, cy)) {DeleteDC();return FALSE;		}}else{if (!bmp.CreateCompatibleBitmap(&CClientDC(NULL), cx, cy)){DeleteDC();return FALSE;	}}this->SelectObject(&bmp);m_size.SetSize(cx, cy);return TRUE;	}
	BOOL LoadFile(LPCTSTR sFile, CDC* pDC = NULL){	//加载一张exe外部位图HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, sFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);if (!hBitmap)return FALSE;	if (!CreateCompatibleDC(NULL)){DeleteObject(hBitmap);return FALSE;}SelectObject(hBitmap);BITMAP bm;GetObject(hBitmap, sizeof(bm), &bm);m_size.SetSize(bm.bmWidth, bm.bmHeight);DeleteObject(hBitmap);return TRUE;}
	BOOL LoadBitmap(UINT nBitmapID, CDC* pDC = NULL)	//加载一张资源位图{if (!CreateCompatibleDC(NULL))return FALSE;CBitmap bmp;if (!bmp.LoadBitmap(nBitmapID)){DeleteDC();return FALSE;}SelectObject(&bmp);BITMAP bm;bmp.GetBitmap(&bm);m_size.SetSize(bm.bmWidth, bm.bmHeight);return TRUE;}
	CMemoryDC(UINT nBitmapID){LoadBitmap(nBitmapID);}CMemoryDC(LPCTSTR sFile,CDC* pDC = NULL){LoadFile(sFile, pDC);}CMemoryDC(int cx,int cy,CDC* pDC=NULL){Create(cx, cy, pDC);}
	void MakeRgn(CRgn& r, COLORREF col){r.CreateRectRgn(0, 0, 0, 0);int i = -1, cx = m_size.cx;int j = -1, cy = m_size.cy;while (++j<cy)	{i = -1;while (++i<cx){if (GetPixel(i, j) != col)	{CRgn r1;r1.CreateRectRgn(i, j, i + 1, j + 1); //1*1像素r.CombineRgn(&r, &r1, RGN_OR);}}}}};

封装CMemoryDC开发游戏透明动画

CFlashDlg.h

#pragma once
#include "CMemoryDC.h"
class CCFlashDlg : public CDialogEx{//二维动画 不停的切换7张图, x y方向不断地移动int m_nIndex{}; //第几张图片CPoint m_pos{}, m_dir{ 5,5 };//m_pos偏移位置 m_dir每次运动5,5enum {Fly_nCount =7}; //图片总数CMemoryDC m_dcBack{_T("./res/back.bmp")}; //背景图片CMemoryDC m_dcFlys[Fly_nCount]; //蝴蝶CRgn m_rs[Fly_nCount]; //取出背景颜色void LoadPictures();public:afx_msg void OnTimer(UINT_PTR nIDEvent);
};

CFlashDlg.cpp

#include "pch.h"
#include "framework.h"
#include "CFlash.h"
#include "CFlashDlg.h"
#include "afxdialogex.h"
void CCFlashDlg::LoadPictures(){int i = -1;CString str;while (++i<_countof(m_dcFlys)){str.Format(_T("./res/%03d.bmp"), i + 1);m_dcFlys[i].LoadFile(str);m_dcFlys[i].MakeRgn(m_rs[i],0x00ff00ff);}
}
BOOL CCFlashDlg::OnInitDialog()
{CDialogEx::OnInitDialog();int cx = GetSystemMetrics(SM_CXSCREEN);int cy = GetSystemMetrics(SM_CYSCREEN);SetWindowPos(NULL, 0, 0, cx/2, cy/2, SWP_NOZORDER);LoadPictures();SetTimer(1, 16, NULL);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void CCFlashDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文CRect rect;GetClientRect(rect);dc.SetStretchBltMode(STRETCH_HALFTONE);dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &m_dcBack, 0, 0, m_dcBack.GetWidth(), m_dcBack.GetHeight(), SRCCOPY);CMemoryDC mdc(200,180); //创建默认的黑色if (mdc.GetSafeHdc())dc.BitBlt(200, 150, 200, 180, &mdc, 0, 0, SRCCOPY);//CRgn r;//r.CreateRectRgn(0, 0, 0, 0); //基址//r.CopyRgn(m_rs+m_nIndex);  //往那个跑先复制出来 不要破坏它 形状//r.OffsetRgn(m_pos); //你要输出到那个位置//dc.SelectObject(&r);//dc.BitBlt(m_pos.x, m_pos.y, m_dcFlys->GetWidth(),m_dcFlys->GetHeight(), m_dcFlys + m_nIndex, 0, 0,SRCCOPY);auto pDC = m_dcFlys + m_nIndex; //等价于 :&m_dcFlys[m_nIndex]pDC->BitTrans(m_pos.x, m_pos.y, pDC->GetWidth(), pDC->GetHeight(), &dc, 0, 0, 0xff00ff);if (++m_nIndex >= Fly_nCount)m_nIndex = 0 ;if (m_pos.x + m_dcFlys->GetWidth() > rect.right || m_pos.x < 0)m_dir.x *= -1;if (m_pos.y + m_dcFlys->GetHeight() > rect.bottom || m_pos.y < 0)m_dir.y *= -1;
}
void CCFlashDlg::OnTimer(UINT_PTR nIDEvent)
{m_pos.Offset(m_dir);Invalidate(FALSE);CDialogEx::OnTimer(nIDEvent);
}

在这里插入图片描述

封装CMemoryDC开发游戏动画

QQDlg.h

#pragma once
#include "CMemoryDC.h"
class CQQDlg : public CDialogEx
{CPoint m_pos{}, m_dir{ 5,5 }; enum { Fly_nCount = 7 }; //图片总数CMemoryDC m_dcFlys[Fly_nCount]; //蝴蝶CRgn m_rs[Fly_nCount];  int m_nIndex{ 0 };
public:afx_msg void OnTimer(UINT_PTR nIDEvent);
};

QQDlg.cpp

BOOL CQQDlg::OnInitDialog(){CDialogEx::OnInitDialog();int i = -1;while (++i < _countof(m_dcFlys)){m_dcFlys[i].LoadBitmap(IDB_FLY1 + i);m_dcFlys[i].MakeRgn(m_rs[i], 0xff00ff);}SetTimer(1, 16, NULL);CRgn r;r.CreateRectRgn(0, 0, 0, 0);r.CopyRgn(&m_rs[m_nIndex]);SetWindowRgn(r, FALSE);SetWindowPos(NULL, m_pos.x, m_pos.y, m_dcFlys->GetWidth(), m_dcFlys->GetHeight(), SWP_NOZORDER);return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void CQQDlg::OnPaint()
{CPaintDC dc(this); // 用于绘制的设备上下文int cx = m_dcFlys->GetWidth();int cy = m_dcFlys->GetHeight();dc.BitBlt(0, 0, cx, cy, &m_dcFlys[m_nIndex], 0, 0, SRCCOPY);if (++m_nIndex >= _countof(m_dcFlys)){m_nIndex = 0;}
}
void CQQDlg::OnTimer(UINT_PTR nIDEvent){CDialogEx::OnTimer(nIDEvent);CRgn r;r.CreateRectRgn(0, 0, 0, 0);r.CopyRgn(&m_rs[m_nIndex]);SetWindowRgn(r,FALSE);	 //不这样的话到第七帧的时候就会出来阴影Invalidate(FALSE);SetWindowPos(NULL, m_pos.x, m_pos.y,0,0, SWP_NOZORDER | SWP_NOSIZE);m_pos.Offset(m_dir);int cx = GetSystemMetrics(SM_CXSCREEN);int cy = GetSystemMetrics(SM_CYSCREEN);if (m_pos.x + m_dcFlys->GetWidth() > cx || m_pos.x < 0)m_dir.x *= -1;if (m_pos.y + m_dcFlys->GetHeight() > cy || m_pos.y < 0)m_dir.y *= -1;		}

在这里插入图片描述

附录

四大窗口CDC派生类

CPaintDC,CClientDC,CWindowDC,CMemoryDC类
CBitmap对象创建后,默认所有像素都是黑色,0x00000000四个字节一个像素。

相关文章:

MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发

文章目录 CRgn类简介与开发CRgn类简介CRgn类区域管理开发CRgn类区域管理与不规则形状的选取 封装CMemoryDC类并应用开发CMemoryDC.h封装CMemoryDC开发游戏透明动画CFlashDlg.hCFlashDlg.cpp 封装CMemoryDC开发游戏动画 附录四大窗口CDC派生类 CRgn类简介与开发 CRgn类简介 CR…...

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题

解决VScode远程服务器时opencv和matplotlib无法直接显示图像的问题 1、本方案默认本地已经安装了VScode与MobaXterm2、在服务器端3、在本地端安装MobaXterm4、测试5、opencv显示测试&#xff08;测试过程中需保持MobaXterm开启的状态&#xff09;6、 matplotlib显示测试&#x…...

支付模块功能实现(小兔鲜儿)【Vue3】

支付 渲染基础数据 支付页有俩个关键数据&#xff0c;一个是要支付的钱数&#xff0c;一个是倒计时数据&#xff08;超时不支付商品释放&#xff09; 准备接口 import request from /utils/httpexport const getOrderAPI (id) > {return request({url: /member/order/$…...

php meilisearch demo

# 创建一个meilisearch 使用完自动销毁 docker run -itd --rm -p 7700:7700 getmeili/meilisearch:v1.3docker-compose 参数 version: "3" networks:flyserver:driver: bridge services:search:image: getmeili/meilisearch:v1.3restart: alwaysenvironment:- MEILI…...

芒格之道——查理·芒格股东会讲话1987-2022

你越是认真生活&#xff0c;你的生活就会越美好&#xff01; 这里将读书过程划线的内容摘抄在这里&#xff0c;方便自己回顾。 书分为两部分&#xff0c;我先读了后半部分&#xff0c;而且是从后往前读&#xff0c;到了前半部分&#xff0c;我是从前往后读。书还挺贵&#xff…...

如何运营手游联运平台游戏?

运营手游联运平台游戏需要综合考虑多个方面&#xff0c;包括游戏选择、合作伙伴、市场推广、用户运营等。以下是运营手游联运平台游戏的一些建议&#xff1a; 游戏选择&#xff1a;选择优质的手游&#xff0c;确保游戏的品质和内容能够吸引玩家&#xff0c;满足市场需求。 合…...

vscode连接远程Linux服务器

文章目录 一、环境安装1.1 下载vscode1.2 下载vscode-sever 二、ssh链接2.1 安装Remote-SSH2.2 设置vscode ssh2.3 设置免密登录2.3.1 本地生成公私钥2.3.2 服务器端添加公钥 三、安装插件3.1 vscode安装插件3.1.1 在线安装插件3.1.2.1 下载插件3.1.2.2 安装插件 3.2 vscode-se…...

numpy 转换成 cupy 利用GPU执行 错误

ModuleNotFoundError: No module named cupy._core. routines_sorting 提示缺少包 使用 pyinstaller -D views.py --nocons 可以正常打包出来 但是运行出现报错 说明这个打包工具 忽略了很多 隐式导入的包 解决方法很简单 hiddenimports [fastrlock, fastrlock.rlock, cu…...

力扣:55. 跳跃游戏(Python3)

题目&#xff1a; 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣 示例&#xf…...

Unity 编辑器资源导入处理函数 OnPreprocessAudio :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPreprocessAudio 用法 点击封面跳转下载页面 简介 在 Unity 中&#xff0c;资源导入是一个非常重要的环节&#xff0c;它决定了资源在项目中的使用方式和效果。Unity 提供了一系列的资源导入处理函数&#xff0c;其中之一就是 OnPreprocessAud…...

mongodb-win32-x86_64-2008plus-3.4.24-signed.msi

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\Users\Administrator>cd C:\MongoDB\Server\3.4\binC:\MongoDB\Server\3.4\bin>C:\MongoDB\Server\3.4\bin>mongod --help Options:General options:-h [ --help ] …...

java的反射

在java语言中&#xff0c;反射机制是指对于处在运行状态的类&#xff0c;都能够获取到这个类的所有属性和方法。对于任意一个对象&#xff0c;都能够调用它的任意一个方法以及访问它的属性&#xff1b;这种通过动态获取类或对象的属性以及方法从而完成调用功能被称为java语言的…...

MySQL — InnoDB 锁

文章目录 锁共享锁和排他锁意向锁记录锁间隙锁临键锁插入意向锁自增锁 锁 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前&#xff0c;先向系统发出请求&#xff0c;对其加锁。加锁后事务就对该数据对象有了一定的控制&#xff0c;在该事务…...

首批获得金融级行业云平台认证,天翼云深耕行业云

云计算下半场看什么&#xff1f; 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速&#xff0c;上云已是政企用户推动其数字化转型不断深入的重要抓手&#xff0c;成为不可阻挡的趋势。 与互联网用户相比&#xff0c;政企用户上云极为…...

浅谈Python解释器的组成

Python解释器是一个复杂的软件&#xff0c;它可以解释和执行Python代码。以下是Python解释器的主要组成部分&#xff1a; 源代码词法分析器&#xff08;Lexical Analyzer&#xff09;: 这部分的任务是将输入的Python源代码分解成称为"tokens"的基础元素。例如&#x…...

服务限流治理

一、基础概念 1.什么是服务限流&#xff1f; 限流在日常生活中也很常见&#xff0c;比如节假日你去一个旅游景点&#xff0c;为了不把景点撑爆&#xff0c;管理部门通常会在外面设置拦截&#xff0c;限制景点的进入人数&#xff08;等有人出来之后&#xff0c;再放新的人进去…...

机器学习笔记 - 使用CLIP在没有数据的情况下创建图像分类器

想象一下,如果我们现在需要对人们是否戴眼镜进行分类,但您没有数据或资源来训练自定义模型。该怎么办?这里我们了解如何使用预先训练的 CLIP 模型来创建自定义分类器,而无需任何培训。这种方法称为零样本图像分类,它可以对原始 CLIP 模型训练期间未明确看到的类别图像进行…...

42.利用 牛顿迭代法解非线性高维方程组(matlab程序)

1.简述 若向量记号为X,方程组就可以写成F(X)0的形式。 我们知道&#xff0c;对于一元函数的牛顿迭代法求根公式 类似的&#xff0c;对于多元函数求根公式 其中X是向量&#xff0c;是非线性方程组对应的雅可比矩阵。 具体求解的时候&#xff0c;我们可以先通过绘图命令绘制图形…...

我在leetcode用动态规划炒股

事情是这样的&#xff0c;突然兴起的我在letcode刷题 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III 以上三题。 1. 121. 买卖股票的最佳时机 1.1. 暴力遍历&#xff0c;两次遍历 1.1.1. 算法代码 public class Solution {public int Ma…...

rust实践-异步并发socket通信

客户端 [package] name = "rust_client" version = "0.1.0" edition = "2021"[dependencies] tokio = {version = "1.14.0", features = ["full"] }use tokio::io::{self, AsyncReadExt, AsyncWriteExt}; use tokio::net::…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...