实现了简单的监控视屏分屏浏览技术//////计算视频面板位置和面积/////////总面积和坐标///privateIListCalcPanelRectangle(intchannelCount,SizeTotalArea){IListresult=newList();//模数intmodulo;if(channelCount64)modulo=8;elsemodulo=(int)Math.Ceiling(Math.Sqrt(channelCount));//平方根intwidth,height;//单个画面大小width=(TotalArea.Width-modulo*1)/modulo;height=(TotalArea.Height-modulo*1)/modulo;for(inti=0;i<channelCount;i++){Rectanglerect=newRectangle();//AxDICOMax.AxDICOMXrect=newAxDICOMax.AxDICOMX();rect.Width=width;rect.Height=height;if(i%modulo==0){rect.X=1;if(i==0)rect.Y=1;elserect.Y=result[i-modulo].Y+height+1;}else{rect.X=result[i-1].X+width+1;rect.Y=result[i-1].Y;}result.Add(rect);}returnresult;}
2025/3/30 3:54:42 35KB C# Panel
1
图像的增强/////////////////////////////////直方图对话框构造函数;
ZFT::ZFT(CWnd*pParent/*=NULL*/):CDialog(ZFT::IDD,pParent)//ZFT为定义的用来显示直方图的对话框类;
{ Width=Height=0;//对话框初始化阶段设置图像的宽和高为"0";
}////////////////////////对话框重画函数;
voidZFT::OnPaint(){ CRectrect;//矩形区域对象;
 CWnd*pWnd;//得到图片框的窗口指针;
 pWnd=GetDlgItem(IDC_Graphic);//得到ZFT对话框内的"Frame"控件的指针;
 file://(IDC_Graphic为放置在对话框上的一个"Picture"控件,并讲类型设置为"Frame")。
 pWnd->GetClientRect(&rect);//得到"Frame"控件窗口的"视"区域;
 inti; CPaintDCdc(pWnd);//得到"Frame"控件的设备上下文;
 file://画直方图的x、y轴;
 dc.MoveTo(0,rect.Height()); dc.LineTo(rect.Width(),rect.Height()); dc.MoveTo(0,rect.Height()); dc.LineTo(0,0); file://画直方图,num[]是"ZFT"的内部数组变量,存放的是图像各个灰度级出现的概率;
该数组的各个分量在  显示具体图像的直方图时设置;
 for(i=0;iGetWindowRect(&rect);//获取pWnd窗口对象窗口区域位置;
 file://屏幕坐标转换为客户区坐标;
 ScreenToClient(&rect); file://判断当前鼠标是否指在直方图内;
 if(rect.PtInRect(point)) {  intx=point1.x-rect.left;  file://当前鼠标位置减去区域的起始位置恰好为当前鼠标所指位置所表示的灰度级;
  string.Format("%d",x);  file://显示当前位置对应的图像的灰度级;
  pWndText->SetWindowText((LPCTSTR)string); } CDialog::OnMouseMove(nFlags,point);}////////////////////////////////////////voidCDibView::OnImagehorgm()file://在程序的"视"类对象内处理显示图像直方图的函数;
{ CDibDoc*pDoc=GetDocument(); HDIBhdib; hdib=pDoc->GetHDIB(); BITMAPINFOHEADER*lpDIBHdr;//位图信息头结构指针;
 BYTE*lpDIBBits;//指向位图像素灰度值的指针;
 lpDIBHdr=(BITMAPINFOHEADER*)GlobalLock(hdib);//得到图像的位图头信息 lpDIBB
2024/11/9 9:49:33 134KB 图像增强
1
保留原有所有功能,新增直接从mapinfo图层输出googleearthkml文件的工具。
Mapinfo2Googleearth将ADA_CDMATool基础上生成的CDMA_Cell_Map_NB图层直接转为googleearth的kml文件。
kml保留扇区的三叶草图形,全向站用六边形标识。
///////原有功能/////////ADACDMAToolHelp扇区信息表格式 扇区信息表:CdmaCellInfo.xls。
“Bearing”列为方位角,“radius”列为半径,“FREQ”列为不同频率,“H_BeamWidth”为扇区水平瓣宽,“Longitude”经度,“Latitude”纬度。
“扇区类型”列用“射频拉远”标识是否RRU站。
“基站名”列标识站名或者射频拉远站的施主站名。
“物理地址”列标识实际站点站名。
“NeighborNumber”列保存对应扇区的邻小区数。
“N01”记录第一个邻小区的小区号,必须放在第24列。
MakeCell用来生成扇区结构的mapinfo图层,用不同的方位角和半径来区分同一物理地址不同频点的扇区。
扇区信息表:CdmaCellInfo.xls,放在和本插件同一目录下。
并在同一目录下生成图层CDMA_Cell_Map_NB。
下图即为生成的基站扇区图,圆形为全向站(包括室分系统)注:以下所有的工具均需要在生成的CDMA_Cell_Map_NB图层上工作!RRULine 用来生成RRU站和施主站之间的连线。
用箭头工具点击扇区,如果扇区是RRU站则画出其与施主站之间的连线。
用RECT工具进行区域选择,程序会将区域范围内的RRU站与施主站之间连线。
DrawRRULineall 一次性生成CDMA_Cell_Map_NB图层中所有RRU站与其施主站间的连线。
注:生成全网的RRU联线,所需时间较长。
FindPN 用来查找CDMA_Cell_Map_NB图层中所有指定PN的扇区,填充颜色并标注PN。
可以用此来检查PN复用距离。
下图为findPN274的结果,标注PN274并红色填充对应扇区。
NBCheck 显示所选择扇区的所有邻小区并用颜色填充。
可以用此来查看是否有明显的PN漏配。
如果点击选择的位置有多个扇区时,会弹出选择对话框供用户确定扇区。
PNOneWayCheck点击图层,输出所点击扇区的邻小区重复PN信息,或者多余邻小区信息(多余邻小区为小区号已经不在现网中)。
注:PNOneWay和Twoway与某一地点的覆盖有很大关系,并不仅仅是邻小区设置的问题,程序中只是检查了基站邻小区的PN是否有重复PNTwoWayCheck 检查所点击扇区的邻小区、所有二次邻小区(邻小区的邻小区)之间的PN是否有重复。
如果二次邻小区PN重复,则可能存在PNTwoway的风险print出PNTwoway点位的Cell信息,在map上连线,显示造成Twoway的邻小区路径。
注:此程序运行时间视邻小区个数与PN重复数有关,在2min~10min左右注:PNOneWay和Twoway与某一地点的覆盖有很大关系,并不仅仅是邻小区设置的问题,程序中检查了基站邻小区、所有二次邻小区的PN是否有重复PNTwoWayCheck2 检查所点击扇区的邻小区与二次邻小区之间的PN复用关系,不检查二次邻小区之间的复用关系。
用不同的颜色填充和连线显示出可能存在的PNTwoWay,此工具检查出来的PNTwoWay结果比PNTwoWayCheck检查出来的结果更有风险。
话统数据分析 选择需要分析的数据列,或者输入需要分析的数据列(输入的列名要与CdmaCellInfo.xls中的列名完全一致),输入分析数据的最大值和5类层级的填充颜色和范围。
用不同的颜色标识属于不同范围的扇区,并用图示标识出来。
2023/9/22 19:34:05 4.37MB CDMA 网络优化 插件 googleearth
1
均值漂移算法meanshiftTrack一、实验内容完成基于MeanShift的目标跟踪算法,红框标出目标区域实现实时追踪。
二、算法原理1.在当前帧,计算候选目标的特征2.计算候选目标与初始目标的相似度3.计算权值4.利用MeanShift算法,计算目标新位置在这里插入图片描述5.若新目标中心需位于原目标中心附近,则停止,否则转步骤2三、思路流程截取跟踪目标矩阵rect;
求取跟踪目标的加权直方图hist1;
读取视频序列中的一帧,先随机取一块与rect等大的矩形,计算加权直方图hist2;
计算两者比重函数,如果后者差距过大,更新新的矩阵中心Y,进行迭代(MeanShift是一种变步长可以迅速接近概率密度峰值的方法),直至一定条件(移动步长平方和大于0.5或超过20次迭代)后停止。
2023/8/2 9:24:56 187.81MB DIA 数字图像分析 均值漂移 目标跟踪
1
用DDraw实现射击游戏阐发文档要点一:画图自动切割IDirectDrawSurface7::BltFast()方式中不自动切割成果,即当画图元素逾越窗口之外时不会自动切割,DDraw遴选自动漠视不画,组成一旦逾越窗口,画图元素会忽然磨灭。
处置这一下场的方式是手动切割,代码如下://自动切割 RECTscRect; //寄存之后窗口大小地域 ZeroMemory(&scRect,sizeof(scRect)); GetWindowRect(GetActiveWindow(),&scRect); //提防图片左上角逾越窗口左上角 if(xscRect.right?scRect.right:x; y=y>scRect.bottom?scRect.bottom:y; m_rect.right=x+m_rect.right-m_rect.left>scRect.right?scRect.right-x+m_rect.left:m_rect.right; m_rect.bottom=y+m_rect.bottom-m_rect.top>scRect.bottom?scRect.bottom-y+m_rect.top:m_rect.bottom;惟独将上述代码加在CGraphic::BltBBuffer()中的m_bRect=m_rect;前就可。
要点二:配景的滚轴实现 画配景能够分为如下三种情景: 情景一:配景图片与窗口等高 情景二:配景图片高度小于窗口高度 情景三:配景图片高度大于窗口高度上述教学图与代码相对于应地看,有助于约莫知道。
另外,要点一实现之后,由于已经能够自动切割,画配景能够用另外方式。
要点三:精灵图的实普通游戏中,如RPG游戏中的人物图、射击类游戏的飞机、爆炸等,叫做精灵图。
精灵图实际上是将齐全帧的图片放在一个文件中,游戏时靠一个RECT来抑制画图像文件中的哪一部份,进而抑制游戏展现哪一帧图,惟独抑制好RECT的位置就可。
如下图:抑制RECT的四个角的坐标的挪动,有如下代码:if(m_timeEnd–m_timeStart>100) //惟独到了100ms之后才画图 {m_ImageID++; if(m_ImageID-m_beginID>=num) { m_ImageID=m_beginID; //末了一帧的下一帧是第一帧 } m_timeStart=timeGetTime(); } intid=m_ImageID++; SetRect(&m_rect,41*id,0,41*(id+1),41); //飞机精灵图大小是41×41 m_pGraph->BltBBuffer(m_pImageBuffer,true,m_Pos.x,m_Pos.y,m_rect);如许就实现为了精敏捷画的下场。
要点四:拿STL举行枪弹的实现枪弹的实现能够使用STL中的vector,当按下开战键时收回一颗枪弹,就往vector中削减一个结点;
当枪弹飞出窗口或者击中敌机时,再将结点从vector中删除了。
每一帧游戏画面中枪弹翱翔时惟独将vector中的齐全枪弹举行处置、绘画就可。
参考代码如下:1.削减枪弹if(g_ctrlDown) //当ctrl键按下时开炮! { m_BulletEnd=m_Gtime->GetTime(); if((m_BulletEnd-m_BulletStart)*1000>120) //假如络续按着开战键不放,这里抑制不会收回太多枪弹 { m_BulletStart=m_BulletEnd; MBULLETtmpBullet; tmpBullet.pos.x=m_SPos.x-1; //记实开战时的枪弹位置 tmpBullet.pos.y=m_SPos.y-26; tmpBullet.speed=5; //该枪弹的翱翔速率 m_BulletList.push_back(tmpBullet); //将枪弹削减到vector中 } } 2.删除了枪弹vector::iteratoritei; //vector迭代器 for(itei=m_BulletList.begin();itei!=m_BulletList.end();itei++) //遍历齐全枪弹{m_BulletList.erase(itei); //删除了这个枪弹itei=m_BulletList.begin(); //删除了一个结点后,为防止侵蚀下次就重新查验if(m_BulletList.empty()) break; //若删除了结点后枪弹vector已经空则跳出轮回} 3.枪弹遍历处置vector::iteratoritei; //vector迭代器 for(itei=m_BulletList.begin();itei!=m_BulletList.end();itei++) //遍历齐全枪弹{itei->pos.y-=itei->speed; //枪弹翱翔}要点五:碰撞检测使用WindowsAPI函数RectInRegion:vector::iteratoritei; //vector迭代器for(itei=m_EnimyList.begin();itei!=m_EnimyList.end();itei++) //遍历齐全敌机{HRGNhrgn=::CreateRectRgn(m_player->pos.x,m_player->pos.y,m_player->pos.x+41,m_player->pos.y+41); //患上到飞机Region,图宽41高41 SetRect(&m_rect,itej->getPosition().x,itej->getPosition().y,itej->getPosition().x+50,itej->getPosition().y+50) //患上到敌机rect,敌机宽50高50 if(RectInRegion(hrgn,&m_rect)) //两机相撞 { ……………………. //碰撞之后的种种处置 }}让碰撞愈加准确:使用WindowsAPI函数PtInRegion()以及CreatePolygonRgn(),选取配角飞机的三个关键点的坐标放在POINT数组中,并将其作为参数代入CreatePolygonRgn()中天生HRGN,在枪弹与配角飞机做碰撞检测时惟独分辨枪弹的中间点能否在这个Region中就可(PtInRegion())。
留意:CreateRectRgn()与CreatePolygonRgn()等建树Region的函数会占用体系资源,由于游戏的主渲染函数Render()是络续实施的,如许会组成资源糜掷,于是在用完之后未必要释放:DeleteObject(region)要点六:敌机直线翱翔末了想这个下场的时候,感应很好实现,脑子里马上想到以及了。
其实如许实现有下场,当尽头以及尽头的连线斜率不是1或者-1时就会涌现意想不到的责任了,飞机并无直接飞向尽头,而因此斜率相对于值为1的路途飞已经往,再水平或者垂直飞向尽头。
处置这个下场有多少个方式,其中有一个方式是行使盘算机图形学上的Bresenhem直线算法。
该算法用于盘算机画平面上的直线,算法如下:|m|abs(deltaY))//轨迹斜率0)//1 { if(m_bFirstCalculate) { m_Delta=2*abs(deltaX)-abs(deltaY);//d0=2×dx-dy m_bFirstCalculate=false; } //依据轨迹斜率分辨能否要挪动X坐标 if(m_Delta>0)//m_iTempo)break;}//endofwhile(*pStr)
2023/5/1 0:27:02 2.18MB DDraw
1
这个为啥呢,只好把截图的函数代码翻出来看,以前是用这种方式的:BitBlt(dcImage,0,0,(int)(rect.Width),(int)(rect.Height),dcScreen,(int)(rect.Left),(int)(rect.Top),TernaryRasterOperations.SRCCOPY);
凭直觉感觉应该是由于这种通过DC的方式对WPF程序支持有问题,但是又觉得奇怪就是截取其它的WPF组件和窗口都没有问题,偏偏Popup窗口不行。
2023/3/16 21:29:53 26KB 截屏方 C#
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡