BCB做个仪表 背景图要动 图片转动 并且频率很高

任参果 2018-11-28 09:49:24



就是背景得表盘移动

在网上找了个代码,有2个问题 一是 图片转动比较慢 转几次以后就卡死了 二是 转动以后 图片失真 并且有白得地方
void picturexz(Graphics::TBitmap *Source,Graphics::TBitmap *NewPic,int angle)//
{
if(angle>180){
angle=360-angle;
}
if(angle <-180){
angle=360+angle;
}
float radians=(2*3.1416*angle)/360;
float cosine=(float)cos(radians);
float sine=(float)sin(radians);
float Point1x=(Source->Height*sine);
float Point1y=(Source->Height*cosine);
float Point2x=(Source->Width*cosine-Source->Height*sine);
float Point2y=(Source->Height*cosine+Source->Width*sine);
float Point3x=(Source->Width*cosine);
float Point3y=(Source->Width*sine);
float minx=0,miny=0,maxx=0,maxy=0;
minx=Point2x<Point3x?Point2x:Point3x ;
minx=minx<Point1x?minx:Point1x;
minx=minx<0?minx:0;
miny=Point2y<Point3y?Point2y:Point3y ;
miny=miny<Point1y?miny:Point1y;
miny=miny<0?miny:0;
maxx=Point2x>Point3x?Point2x:Point3x ;
maxx=maxx>Point1x?maxx:Point1x;
maxx=maxx>0?maxx:0;
maxy=Point2y>Point3y?Point2y:Point3y ;
maxy=maxy>Point1y?maxy:Point1y;
maxy=maxy>0?maxy:0;

int DestBitmapWidth,DestBitmapHeight;
if(angle>90&&angle <180)
DestBitmapWidth=(int)ceil(-minx);
else
DestBitmapWidth=(int)ceil(maxx-minx);

if(angle>-180&&angle <-90)
DestBitmapHeight=(int)ceil(-miny);
else
DestBitmapHeight=(int)ceil(maxy-miny);

NewPic->Height=DestBitmapHeight;
NewPic->Width=DestBitmapWidth;
for(int x=0;x <DestBitmapWidth;x++)
{
for(int y=0;y <DestBitmapHeight;y++)
{
int SrcBitmapx=(int)((x+minx)*cosine+(y+miny)*sine);
int SrcBitmapy=(int)((y+miny)*cosine-(x+minx)*sine);
if(SrcBitmapx>=0&&SrcBitmapx <Source->Width&&SrcBitmapy>=0&&
SrcBitmapy <Source->Height)
{
NewPic->Canvas->Pixels[x][y]=Source->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
}
}
}
}



void __fastcall TForm1::Button3Click(TObject *Sender)
{
Graphics::TBitmap *pBmp=new Graphics::TBitmap();
picturexz(this->Image1->Picture->Bitmap,pBmp,10);
this->Image1->Picture->Bitmap=pBmp;
delete pBmp;
}

...全文
690 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
只旋转不能满足功能需求吧, 还有俯仰角度。
还是老老实实画吧 :
void draw( 坐标原点,水平旋转角度,俯仰角度 )
{ ...
}
chinayu2007 2019-02-25
  • 打赏
  • 举报
回复
用GDI+也可以旋转
draculamx 2018-11-29
  • 打赏
  • 举报
回复
要想效率高,直接使用win7中的Direct2D就行了,方便,直接在VCL中就可以用,不用去FMX
我不懂电脑 2018-11-28
  • 打赏
  • 举报
回复
引用 2 楼 zhiaisiying 的回复:
转动几次以后 卡死 是什么原因 也不是卡死 就是半天没反应 过几十秒就又好了


1.卡死一般是有资源漏洞造成的。
2.一般这种仪表盘都是用组态王做。
任参果 2018-11-28
  • 打赏
  • 举报
回复
转动几次以后 卡死 是什么原因 也不是卡死 就是半天没反应 过几十秒就又好了
ooolinux 2018-11-28
  • 打赏
  • 举报
回复
转动以后 图片失真
————
每次转动都用原始图片重新计算,而不是接着上次转动。
  • 打赏
  • 举报
回复
最简单的方法是准备一套各角度的图,根据需要贴上去。要实时旋转的话可以考虑用FMX,FMX框架中任意组件都支持旋转、3D坐标变换(2D组件也可以附在3D层上实现)。如果是左图这样的效果也可以实时绘制。
内容概要:本文系统研究了虚拟同步发电机(VSG)在并网过程中的惯量-阻尼协同自适应控制策略,结合Simulink仿真与Matlab代码实现,深入探讨其对电网频率稳定的支撑作用。研究内容涵盖VSG的基本建模、双机并联条件下的功率精确分配、微电网黑启动过程、预同步控制技术、虚拟阻抗的引入及其对系统稳定性的影响,并通过根轨迹分析、调节系数对比等方法验证所提控制策略的有效性与鲁棒性。该工作为比例新能源接入背景下的电力系统提供了增强惯性响应和动态稳定性的解决方案,并构建了一个完整的仿真验证平台。; 适合人群:具备电力系统分析、自动控制理论基础,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制、电力电子变换器控制及电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握虚拟同步发电机的核心运行机理与控制建模方法;② 实现VSG在并网、孤岛切换、黑启动等典型工况下的协同控制仿真;③ 分析惯量与阻尼自适应调控对系统频率动态响应的优化效果;④ 为相关课题研究、水平论文复现或实际工程项目提供可扩展的仿真模型与技术支持。; 阅读建议:建议结合文中提供的Matlab代码与Simulink模型,逐步搭建仿真系统,重点理解控制策略的设计逻辑与参数整定方法,并通过改变负载扰动、并网时机、控制器增益等工况进行对比仿真,深入掌握系统稳定性分析的关键技术与优化路径。
内容概要:本文档是PCI-SIG发布的工程变更通知(ECN),针对PCI Express Base Specification 3.1版本中的数据链路层包(DLLP)编码进行两项维护性更新。主要变更包括定义一种新的NOP DLLP(无操作数据链路层包),以支持未来硬件发送端的实现优化,并将所有已分配的DLLP类型编码统一整理至规范中的单一表格(Table 3-1),提升文档一致性与可维护性。接收端被要求在不采取任何动作的情况下丢弃NOP DLLP,且该包可携带24位任意负载用于调试或日志记录。文档明确指出此次变更不涉及硬件或软件的功能性改动,对现有系统几乎无影响。; 适合人群:从事PCI Express协议开发、验证的硬件工程师、固件开发者及测试工程师,具备一定速接口协议基础的技术人员;; 使用场景及目标:①帮助开发人员理解DLLP编码机制及未来硬件优化方向;②为测试规范提供依据,如建议更新Link Test Specification以明确未定义编码测试用例的具体编码选择;③指导协议一致性验证过程中对非法或特殊DLLP的处理行为;; 阅读建议:此资源属于标准修订类技术文档,建议结合PCI Express Base Specification 3.1及相关测试规范对照阅读,重点关注Table 3-1的更新、新增的NOP DLLP格式图(Figure 3-10a)及其在链路层处理流程中的定位,便于准确理解和实施协议要求。

13,872

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧