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;
}

...全文
704 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层上实现)。如果是左图这样的效果也可以实时绘制。
内容概要:本文聚焦于“基于中间电容应力分担机制的三阶立方体双向DC-DC变换器”的建模与优化设计,系统阐述其在dq域下的动态建模方法与控制策略优化,涵盖变频与移相协同控制、高电压增益实现、降频软启动、多模式平滑切换等核心技术。结合Matlab、Simulink及PSCAD仿真平台,深入实现全桥LLC、双三相LLC等谐振变换器的混合控制与动态响应分析,并拓展至飞轮储能系统、混合储能平抑风电波动、直流母线电压稳定控制等实际应用场景,构建了从器件级建模到系统级集成的完整仿真体系。同时包含多项高水平期刊论文的复现内容,强化科研可重复性与工程实用性。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事新能源发电、储能系统、电动汽车、智能电网等领域研发的工程技术人员;具备电路拓扑分析、控制系统设计及仿真基础者更佳。; 使用场景及目标:①掌握高频双向DC-DC变换器的精确建模与先进控制方法;②复现并验证权威期刊论文中的关键仿真案例,提升科研创新能力与仿真技术水平;③应用于储能系统能量管理、新能源并网调控、电动汽车充放电模块等高性能电源变换系统的优化设计与动态性能分析。; 阅读建议:建议按照文档目录结构循序渐进学习,优先理解主拓扑的工作原理与控制逻辑,结合所提供的仿真模型进行实操复现,重点关注不同工况下的动态响应、稳定性边界及模式切换过程,深化对电力电子系统协同控制与多时间尺度动态特性的理解。
内容概要:本文系统研究了基于序贯蒙特卡洛模拟法的配电网可靠性评估方法,并通过Matlab代码实现了算法的仿真与复现。文章深入阐述了该方法在电力系统可靠性分析中的理论基础,通过模拟电力元件的故障与修复过程的时间序列,对配电网的关键可靠性指标(如系统平均停电频率SAIFI、平均停电持续时间SAIDI等)进行精确统计评估。研究结合IEEE标准测试系统,详细展示了状态转移抽样、时序仿真流程设计及可靠性指标计算等关键技术环节的实现方法。该方法能够有效处理复杂配电网络中元件的随机性、相关性与时序特性,为电网的规划、运行维护及风险评估提供了科学、可靠的决策依据。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事电力系统可靠性分析的工程技术人员。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在配电网可靠性评估中的应用原理与实现技巧;②学习如何通过时序仿真评估SAIFI、SAIDI等核心可靠性指标;③为电网规划、故障风险分析和运维策略制定提供量化分析工具; 阅读建议:此资源以Matlab代码为核心载体,强调理论与实践的紧密结合,建议读者在学习过程中仔细研读算法原理,动手运行并调试所提供的代码,深入理解状态抽样、时序推进和指标统计的每一个细节,以达到融会贯通的目的。

13,871

社区成员

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

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