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显示测试(测试过程中需保持MobaXterm开启的状态)6、 matplotlib显示测试&#x…...
支付模块功能实现(小兔鲜儿)【Vue3】
支付 渲染基础数据 支付页有俩个关键数据,一个是要支付的钱数,一个是倒计时数据(超时不支付商品释放) 准备接口 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
你越是认真生活,你的生活就会越美好! 这里将读书过程划线的内容摘抄在这里,方便自己回顾。 书分为两部分,我先读了后半部分,而且是从后往前读,到了前半部分,我是从前往后读。书还挺贵ÿ…...
如何运营手游联运平台游戏?
运营手游联运平台游戏需要综合考虑多个方面,包括游戏选择、合作伙伴、市场推广、用户运营等。以下是运营手游联运平台游戏的一些建议: 游戏选择:选择优质的手游,确保游戏的品质和内容能够吸引玩家,满足市场需求。 合…...
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)
题目: 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源:力扣(LeetCode) 链接:力扣 示例…...
Unity 编辑器资源导入处理函数 OnPreprocessAudio :深入解析与实用案例
Unity 编辑器资源导入处理函数 OnPreprocessAudio 用法 点击封面跳转下载页面 简介 在 Unity 中,资源导入是一个非常重要的环节,它决定了资源在项目中的使用方式和效果。Unity 提供了一系列的资源导入处理函数,其中之一就是 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语言中,反射机制是指对于处在运行状态的类,都能够获取到这个类的所有属性和方法。对于任意一个对象,都能够调用它的任意一个方法以及访问它的属性;这种通过动态获取类或对象的属性以及方法从而完成调用功能被称为java语言的…...
MySQL — InnoDB 锁
文章目录 锁共享锁和排他锁意向锁记录锁间隙锁临键锁插入意向锁自增锁 锁 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务…...
首批获得金融级行业云平台认证,天翼云深耕行业云
云计算下半场看什么? 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速,上云已是政企用户推动其数字化转型不断深入的重要抓手,成为不可阻挡的趋势。 与互联网用户相比,政企用户上云极为…...
浅谈Python解释器的组成
Python解释器是一个复杂的软件,它可以解释和执行Python代码。以下是Python解释器的主要组成部分: 源代码词法分析器(Lexical Analyzer): 这部分的任务是将输入的Python源代码分解成称为"tokens"的基础元素。例如&#x…...
服务限流治理
一、基础概念 1.什么是服务限流? 限流在日常生活中也很常见,比如节假日你去一个旅游景点,为了不把景点撑爆,管理部门通常会在外面设置拦截,限制景点的进入人数(等有人出来之后,再放新的人进去…...
机器学习笔记 - 使用CLIP在没有数据的情况下创建图像分类器
想象一下,如果我们现在需要对人们是否戴眼镜进行分类,但您没有数据或资源来训练自定义模型。该怎么办?这里我们了解如何使用预先训练的 CLIP 模型来创建自定义分类器,而无需任何培训。这种方法称为零样本图像分类,它可以对原始 CLIP 模型训练期间未明确看到的类别图像进行…...
42.利用 牛顿迭代法解非线性高维方程组(matlab程序)
1.简述 若向量记号为X,方程组就可以写成F(X)0的形式。 我们知道,对于一元函数的牛顿迭代法求根公式 类似的,对于多元函数求根公式 其中X是向量,是非线性方程组对应的雅可比矩阵。 具体求解的时候,我们可以先通过绘图命令绘制图形…...
我在leetcode用动态规划炒股
事情是这样的,突然兴起的我在letcode刷题 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III 以上三题。 1. 121. 买卖股票的最佳时机 1.1. 暴力遍历,两次遍历 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::…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
Electron简介(附电子书学习资料)
一、什么是Electron? Electron 是一个由 GitHub 开发的 开源框架,允许开发者使用 Web技术(HTML、CSS、JavaScript) 构建跨平台的桌面应用程序(Windows、macOS、Linux)。它将 Chromium浏览器内核 和 Node.j…...
