精华内容
下载资源
问答
  • FPGA现状

    万次阅读 多人点赞 2019-07-16 19:51:42
    mable 器件,以及全可编程的开发模型,包括软件定义的开发环境等。产品支持  5G  无线、嵌入式视觉、工业物联网和云计算所驱动的各种智能、互连和差异化应用。2014年12月,Xilinx的20nm芯片实现量产,2015年Xilinx...

      FPGA国内现状

      目前中国IC厂商在FPGA这个细分领域和国外巨头的差距远远比其他领域要大。

      FPGA技术门槛非常高,核心技术只掌握在及其少数的公司手上,而且xilinx和atlera手头握有6000多项专利,对后进者形成很高的技术壁垒,国内厂商要么和国外巨头专利交叉授权,要么花钱买专利,但当前我们并没有多少专利可以和xilinx和altera进行交叉许可,购买难度更大,这不仅仅是资金的问题。从canyon bridge收购latTIce被美国否决来看,凡涉及到美国国家安全的高新技术公司,我国是不可能通过收购来获得的,latTIce在行业内充其量是第二团队尚且如此,业界领先的企业我国更难获得。

      国内FPGA的发展只能靠自主,虽然这个过程可能会很漫长,但除此之外没有更好的选择。芯片的自主设计是实现信息安全的最底层保障。这也是为什么与信息处理相关的基础芯片(手机芯片、PC处理器等)需要实现自制的原因。在目前FPGA的技术和供给几乎全部来源于美国,包括欧洲和日本等技术强国也没有掌握到核心技术。

      对于中国而言,国家促进集成电路发展已经提升至国家战略。同时特殊的应用场景(军工、导弹、航天航空)的要求的FPGA,国外对中国是禁运的,这也从另一方面促成国内FPGA自制的契机。目前,国内生产的FPGA主要用于军工、通讯、航空航天等领域。

      在民用领域,国内是FPGA需求最大的市场,现在Xilinx、Altera最大的客户就在中国,通讯市场华为中兴烽火包揽了全国60%以上的量。中国FPGA的发展红利在于需求市场足够大,有需求就要有相应产品来支持。这对于国内厂家就是机会,目前,同方国芯片已经和华为中兴合作,想实现一部分的国产替代。

      最后,从技术角度来说,我们已经不像10年前基本不懂核心技术。国内半导体产业链的不断成熟完善,以及芯片设计能力的不断加强,我们自己可以自主设计和流片ARM架构的手机CPU(海思麒麟、大唐联芯),并成功实现商业化,这在10年前都不敢相信。在我们在过去积累的技术沉淀和创新能力,已经使得我们在FPGA的特定应用领域(军工、通讯)实现一定程度上的自我供给。未来也可能类似于CPU+FPGA用于云数据中心节中,这些应用领域都是信息高度敏高的地方,使用自主设计的芯片更能实现安全可控。

    FPGA市场现状和未来趋势如何?

      中国FPGA的机遇

      为了满足经济发展和国防需求,打破美国的垄断,中国政府多年来投入了数百亿科研经费,通过逆向工程方式仿制美国对我禁运的FPGA产品。但由于知识产权、生产工艺和软件技术等多方面的限制,仿制品种有限,技术无法突破,难以满足国家安全的需要。随着国际形势的变化,通过走私进口禁运产品的渠道可能被切断,进口的关键芯片也可能被人为地嵌入后门通道或定时炸弹等模块,严重危及国家安全。

      我们不得不承认国产FPGA产业与国际巨头还存在较大的差距,不论从产品性能、功能、功耗、软件、应用支撑上都有差距。甚至成本上,我们的优势也不大。

      但是,中国拥有超过50亿元的FPGA市场。“十二五”期间,中国的可编程器件市场仍将保持年均30%以上的增长速度。中国尤其是北京等重要研究部门急需也长期需要FPGA用于国家安全和重点应用,比如航天航空、信息安全、知识产品保护等。此外,中国电子产品市场要求敏捷快速的研发周期和少量多样的产品形态,最适合FPGA应用。

      因此,中国FPGA产业享有巨大的发展空间,机遇与挑战并存。

      全球FPGA市场发展前景展望

      当今,半导体市场格局已成三足鼎立之势,FPGA,ASIC和ASSP三分天下。市场统计数据表明,FPGA已经逐步侵蚀ASIC和ASSP的传统市场,并处于快速增长阶段。

      在全球市场中,Xilinx、Altera两大公司对FPGA的技术与市场仍然占据绝对垄断地位。两家公司占有将近90%市场份额,专利达6000余项之多,而且这种垄断仍在加强。同时,美国政府对我国的FPGA产品与技术出口进行苛刻的审核和禁运,使得国家在航天、航空乃至国家安全领域都受到严重制约。因此,研发具有自主知识产权的FPGA技术与产品对打破美国企业和政府结合构成的垄断,及国家利益意义深远。

      作为一种可编程逻辑器件,FPGA在短短二十多年中从电子设计的外围器件逐渐演变为数字系统的核心。伴随半导体工艺技术的进步,FPGA器件的设计技术取得了飞跃发展及突破。通过FPGA器件的发展历程来看,今后仍将朝下以下几个方向发展:

      ·高密度、高速度、宽频带、高保密;

      ·低电压、低功耗、低成本、低价格;

      ·IP软/硬核复用、系统集成;

      ·动态可重构以及单片集群;

      ·紧密结合应用需求,多元化发展。

      此外,集成了FPGA架构、硬核CPU子系统(ARM/MIPS/MCU)及其他硬核IP的芯片已经发展到了一个“关键点”,它将在今后数十年中得到广泛应用,为系统设计人员提供更多的选择。例如,以应用为导向,在受专利保护的FPGA平台架构上无缝集成特定功能模块,以形成具备行业竞争优势(高性价比)的独特产品。Altera、Cypress®半导体、Intel®和Xilinx®公司等供应商相继在最近一年发布或者开始发售SoCFPGA器件。

      在FPGA领域,Xilinx和Altera长期稳坐第一第二的位置。根据最新Form-10K数据显示,其分别占有48%和41%的市场份额。其中Xilinx净销售额为23.1亿美元,净收入为6.3亿美元;Altera净销售额为19.5亿美元,净收入为7.8亿美元。这两家公司一直以来是市场和技术的领头羊,而剩余的市场份额被LatTIce占据多数。

      为了在竞争中占据主动,Xilinx与Altera新近分别宣布其下一代FPGA产品都将采用高k金属栅技术的 28nm工艺,以满足诸如云计算、移动互联网和3G应用等领域所不断增长的带宽需求。由于PLD器件采用更高技术的工艺节点制造,无疑可以降低成本、提升性能,尤其是能够改进一直以来为ASIC所诟病的功耗水平,以适应更广阔的设计应用。

      Xilinx和Altera虽然控制世界将近90%的FPGA市场,但是他们的产品是大多以纯FPGA为主。“平台化”已成为FPGA一个发展趋势,尽管Xilinx和Altera在FPGA“平台化”方面在最近几年也有涉及,但概念和特点比较简单,没有完全形成气候。

      权威市场调研机构Gartner 2010年初的预测数据表明,FPGA正处于一个加速增长的市场势态中。未来5年,市场平均增长幅度超过12.6%,这种增长幅度远大于ASIC和ASSP市场。同时,市场数据表明其行业平均毛利大于60%。FPGA行业需要更大的市场规模,以吸引更多的使用者。预计未来5年,随着产量增加,成本进一步降低,FPGA市场份额将会持续增大。

     

    今天先就从FPGA开始说起吧。

    FPGA——现场可编程门阵列,是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。换个简单通俗的介绍方式,就好比一个全能运动员,游泳如孙杨、跨栏像刘翔、网球能力堪比李娜,FPGA就是这么神奇的可以通过设定而实现各种复杂的功能电路。FPGA的核心优点:可编程灵活性高、开发周期短、并行计算可编程灵活性高。同时FPGA也有自身的很多需要解决的问题,FPGA限制因素:成本、功耗和编程设计。

    关于国产FPGA发展现状以及未来发展前景趋势详解

    市场空间:

    根据权威市场调研机构Gartner数据显示,2014年全球FPGA市场总规模达到50亿美金,其中,中国的市场份额有15亿美金,中国市场占全球市场的三分之一。分析机构预计2015年至2020年全球FPGA市场的年复合增长率为9%,到2020年全球FPGA 市场规模将达84亿美金。

    具体细分领域来看,在FPGA被用于深度学习之前,FPGA主要有3大应用方向:(1)通信设备的高速接口电路设计,FPGA可以用来做高速信号处理,一般如果AD采样率高,数据速率高,这时就需要FPGA对数据进行处理,比如对数据进行抽取滤波,降低数据速率,使信号容易处理,传输,存储;(2)数字信号处理方向/数学计算方向,包括图像处理,雷达信号处理,医学信号处理等,优势是实时性好,用面积换速度,比CPU快的多;(3)SOPC,即利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者在上面进行嵌入式软件开发。

    FPGA国际市场

    1984年Xilinx刚刚创造出FPGA时,它还是简单的胶合逻辑芯片,而如今在信号处理和控制应用中,它已经取代了自定制专用集成电路(ASIC)和处理器。短短30年的历史长河中,超过上百家行业巨头杀入这个市场,不过最后大部分都铩羽而归。这些公司包括了Intel、Philips、Agere Systems、AMD以及摩托罗拉等国际知名的芯片设计厂商。这是因为,赛灵思Altera在这个领域深耕几十年,两家持续不断地军备竞赛,占据了90%市场,提前布局的专利保护对后来者形成了强大的市场壁垒,几乎封锁了所有通向FPGA商用产品的通途。而MicrosemilatTIce,QuickLogic曾经挑战他们的霸主地位,但是他们的市场份额加起来也不到10%。而最后也因为种种原因市场份额不断下滑,并没有实现对双寡头的突破和挑战。

    可以说,FPGA是全球芯片设计业最需要技术和垄断突破的产品之一,在所有的芯片领域中属于最难以突破和打破格局的技术产品。

    Xilinx:发明的FPGA颠覆了半导体世界,创立了Fabless(无晶圆厂)的半导体模式。Xilinx的产品组合融合了 FPGA、SoC 和 3DIC 系列 All Programmable 器件,以及全可编程的开发模型,包括软件定义的开发环境等。产品支持 5G 无线、嵌入式视觉、工业物联网和云计算所驱动的各种智能、互连和差异化应用。2014年12月,Xilinx的20nm芯片实现量产,2015年Xilinx紧接着推出新的16nm FPGA和SoC,并采用新型存储器UltraRAM,因此继28nm和20nm之后,继续在行业中保持领先。公司产品纵向布局各个制程,因为20nm、28nm、40nm等制程的产品会在市场共存,以满足复杂度不同的各种应用。

    Altera:是世界上“可编程芯片系统”(SOPC)解决方案倡导者。结合带有软件工具的可编程逻辑技术、知识产权(IP)和技术服务,在世界范围内为14,000多个客户提供高质量的可编程解决方案。2015年,英特尔宣布以167亿美元收购FPGA厂商Altera。这是英特尔公司历史上规模最大的一笔收购。随着收购完成,Altera将成为英特尔旗下可编程解决方案事业部。在和Xilinx的制程战之争中,两家巨头各领风骚,Altera路线图中,最近的产品系列"Cedar"(替代Cyclone)采用了台积电16nm工艺将在2016年上半年交付使用。"Oak"系列采用英特尔的14nm工艺,于2016年下半年交付,"Sequoia"采用英特尔的10nm工艺,将于2018年上市Altera将赢得10nm工艺节点之战。

    LatTIce:LatTIce(是全球智能互连解决方案市场的领导者,也是全球第二大FPGA厂,提供市场领先的IP和成本低、功耗小、小尺寸的器件。产品主要有三大块:可编程逻辑;视频传输;毫米波解决方案。公司的最终用户主要是通讯、计算机、工业、汽车、医药、军事及消费品市场的原始设备生产商。在双大哥的夹击之下,LatTIce的路也是走的越发艰难,在中高端市场难以与前两者抗衡。

    中国的破局

    紫光集团想通过购买Lattice快速发展,受到美国外国投资委员会(CFIUS)的审查和特朗普政府的反对后收购以失败告终。那对于国内FPGA如何破局,如何发展,在无法通过外延引入技术的条件下,国内也只能通过人研发和技术积累打破当前的这种格局。

    京微雅格:公司聚集了最早在FPGA行业耕耘与尝试的一批技术精英,他们采用了SoC FPGA的战略,片上整合了DSP、Memory、MCU等单元的CME-GM7系列,试图通过整合的优势打破FPGA市场的壁垒。这个公司实际上有两条产品线:1、自身从头研发的,面向中低端市场的金山系列;2、收购美国CSwitch的产品线,面向高速通信市场。

    产品型号:M7华山系列;HR3纯FPGA低功耗系列;M5金山系列;M1衡山系列。

    不过比较可惜是,在特定的国内行情和市场环境下,公司在发出自己最强音后也由于种种原因走入困境,让自己举步维艰。FPGA对技术支持的门槛相当高,由于京微雅格没有办法做到Pin-Pin,所以需要每一个产品都要有技术工程师保持长时间的维护和跟进,但是产品的成功率还可能不到10%,这样的市场环境下,公司会陷入一种非常被动的局面,长时间的战略失误让京微雅格陷入了人才、资本和发展僵局。

    京微雅格的失败有很多值得思考的地方,FPGA产业的成功不仅在产品,还在于产品线的生态系统平台建设。这个生态系统平台包括:FPGA芯片、EDA工具、IP库……缺一不可。完善的生态系统能够提供给用户更全面的设计资源,从而突出系统优势,迅速适应各种市场应用变化,快速抢占市场高地。同时,市场上的认可是决定芯片厂商能不能在高速的产品迭代中实现技术和资金的积累的重要因素,任何不被市场接受的高性能产品都是失败的。

    黄埔军校之后的国内格局

    京微雅格在FPGA上的努力和成果给了本土后继者很大的动力;京微雅格很多的技术研究人员在进入了后续成立的上海安路科技,AGM和高云半导体团队里。也就是说,京微雅格在中国FPGA领域的开山鼻祖一样的存在使得散乱后的技术人才分散都国内其余的公司中,成为了人才与技术的黄埔军校。

    高云半导体:高云半导体的CEO朱璟辉和SVP宋宁都来自于Lattice团队,尤其是朱璟辉,从清华大学毕业后,1996年-2011年任职Lattice,历经七代FPGA产品的研发,曾获得11项美国专利,5项中国专利,目前还是科技部863计划的可编程器件重大专项的技术负责人。而另一个核心人物宋宁除了任职Lattice高工,还任职过Cadence高工。目前负责高云半导体FPGA全流程软件开发,对FPGA架构、硬件设计、软件研发同步开发有独到经验。所以,Synopsys为高云提供前SynplifyPro高云版端软件软件,也是中国唯一由新思授权的FPGA前端软件。

    低密度非易失性FPGA已经完全取代传统CPLD,并成为低密度FPGA市场的绝对主力,每年约5亿美元的市场销量。可以说,高云半导体切入和对标的是Altera MAX V10和Lattice XO2/3;100万门-500万门易失性FPGA产品,采用台积电55nm基于SRAM,可与Xillinx Spartan及Altera Cyclone系列PK。近日,高云宣布研发成功了GW3AT-100,这是国内首款28纳米中高密度FPGA,由台积电代工。

    上海安路科技:上海安路信息科技有限公司成立于2011年,总部位于浦东张江,创始人为文余波。公司创始人及核心团队来自海外高级技术管理人才、国外FPGA公司产品开发骨干以及学术界资深FPGA科研人员组成。公司研发团队60%以上是复旦、交大、UCLA、UIUC等国内外高校的硕士或者是博士,具有很强的研究能力和设计水准。核心工作成员大多数在世界前五的FPGA公司和EDA公司中从事数十年以上技术研和管理工作,参与开发了多款世界领先的FPGA 芯片和最好的EDA 开发系统。安路当前已经形成了从小规模CPLD(Elf-300、Elf-650)到2百万门FPGA(EG-4、AL3-6、AL3-10、AL3-S10、EG-20、EG-D20)的系列器件,以及一颗已经实际应用了的千万门级FPGA IP核(AL3-130)。华大半导体入股之后,其作为国内最大的国产EDA软件商华大九天与作为自主FPGA厂商安路科技,双方在EDA工具上的合作空间,包括互补性上,都具有很大的想象力。

    AGM:上海遨格芯微电子有限公司(AGM)成立于2012年,是国内领先的以可编程逻辑技术为基础,提供应用市场SoC芯片的半导体集成电路无生产线设计公司。由来自美国硅谷知名可编程逻辑芯片企业的团队和国内资深工程团队创办。AGM是以开发自主产权的编译软件开始,兼容切入现有FPGA软件的生态链。看到智能手机风口的AGM也不失时机出了一款用于智能手机和loT的FPGA芯片,在助力客户逐渐退出低端市场之时,把握住机会,通过价格优势抢夺低端市场。通过最近几年的不断地产品迭代和市场扩展,AGM悄悄地积累了比较稳定的客户,产品线也开始丰富起来,成为了国内FPGA的一批发展迅猛的黑马。

    同创国芯:国产化替代率最大,利润最高的军工院所应用市场,基本上被同创国芯(深圳国微)垄断。连当年的竞争对手成都华微,也是基本没有了声响。而且,同创国芯的民用拳头产品Titan PGT30G已量产,该系列芯片可编程逻辑器件采用了完全自主产权的体系结构和主流先进制造工艺,带有DDR3和PCIe接口,是国内少有的千万门级FPGA。另外采用了台湾联华UMC代工先进的40nm制程,在国内领先。正在中兴通讯,烽火通信试用。

    FPGA行业的发展靠自力更生

    国内FPGA的发展只能依靠自主,这个必然需要漫长的等待和尽心的呵护,但除此之外没有更好的选择。芯片的自主设计是实现信息安全的最底层保障。这也是为什么与信息处理相关的基础芯片(手机芯片、PC处理器等)需要实现自制的原因。在目前FPGA的技术和供给几乎全部来源于美国,包括欧洲和日本等技术强国也没有掌握到核心技术。

    对于中国而言,国家促进集成电路发展已经提升至国家战略。同时特殊的应用场景(军工、导弹、航天航空)要求的FPGA是涉及到国家安全和领土安全的,对芯片的要求也会比较严谨,但这一块本身高性能的产品国外对中国是禁运的,这也从另一方面促成国内FPGA自己满足的契机。目前,国内生产的FPGA主要用于军工、通讯、航空航天等领域。

    在民用领域,国内是FPGA需求最大的市场,现在Xilinx、Altera最大的客户就在中国,通讯市场华为中兴烽火包揽了全国60%以上的量。同时人工智能芯片需求的高速并行计算对FPGA芯片的需求也在几十亿美元的数量级,而国内是人工智能高速芯片发展最快,需求最大的市场。中国FPGA的发展红利在于需求市场足够大,有需求就要有相应产品来支持。这对于国内厂家就是机会,目前,同方国芯片已经和华为中兴合作,想实现一部分的国产替代。

    最后,从技术角度来说,我们已经不像10年前基本不懂核心技术。国内半导体产业链的不断成熟完善,以及芯片设计能力的不断加强,我们自己可以自主设计和流片ARM架构的手机CPU(海思麒麟、大唐联芯),并成功实现商业化,这在10年前都不敢相信。在我们在过去积累的技术沉淀和创新能力,已经使得我们在FPGA的特定应用领域(军工、通讯)实现一定程度上的自我供给。未来也可能类似于CPU+FPGA用于云数据中心节中,这些应用领域都是信息高度敏高的地方,使用自主设计的芯片更能实现安全可控。

    后面,我还要说说我和IC界的朋友交流和我自己的一些感悟。

    1.大家为什么对于技术的追求会停留下来。因为对于很多人来说,等到技术产生产品并融到资金后,实现技术积累到资本积累了。技术再产生的价值短时间内比资本产生的价值会慢很多,多数人会从技术上转向资本市场。这样一遍遍反反复复,所以能看到在技术达到一定的平台后会长时间的原地踏步,后来者也会跟随前面人的脚步。

    2.所谓的产业扶持,切不可本末倒置和打着旗帜反革命。芯片不简单的是需要资本的支撑,因为不完善与不合理的资本炒作反而会使的行业在潮水退去后一地鸡毛。芯片更多的属于技术积累型行业,所有的产品和参数都需要技术员工在工作中不断地去突破和思考,而对于这样一群工程师来说,报酬如果不匹配劳动支出,行业内的技术人才出走与流失是再自然不过的事情了。因此,产业的扶持不仅仅是资本对公司层面的支撑,更需要落实到一个个基层中的技术员工。

    3.芯片行业起步容易,往上层走会很难。芯片做到一定程度后,不再是简单的技术积累能解决的,一定需要对物理和数学有比较深的认知,在整个高的角度去处理基础难点,而这对人才的需求地要求是非常高的。

    4.市场需求端,任何一种芯片从推出到应用,需要几代产品的更迭。国内芯片起步晚,产品性能和国外差距较大,因此会形成一种困局:国内应用端不用国内产品,国内产品更迭跟不上会导致公司倒闭或者产品无法持续更新。国外芯片行业干了几十年,技术路线上的坑和陷阱被先行者填补了很多,而芯片行业并不存在后发优势,之前别人留下的坑还会继续存在哪里,甚至还需要去避免国外厂商在探索过程中申请的成千上万的知识产权保护新增的坑。

    5.芯片行业的国产化任重而道远,我们需要在整个过程中慢慢的去探索。急功近利和空喊口号只不过给了投机分子空间可钻。呵护芯片行业同时也要提升技术人员的福利。

    展开全文
  • 仿制图章工具包含了仿制图章工具和图案图章工具仿制图章工具  就是将图片中有相似的部分,但有部分被遮盖,需要用未被遮盖的部分去修补被遮盖的部分,用污点修复画笔工具又略显达不到要求图案图章工具  将系统中...

      仿制图章工具包含了仿制图章工具和图案图章工具

    仿制图章工具

      就是将图片中有相似的部分,但有部分被遮盖,需要用未被遮盖的部分去修补被遮盖的部分,用污点修复画笔工具又略显达不到要求

      点击alt键选取需要进行仿制的内容,然后将鼠标放到需要修复的地方点击左键涂抹进行仿制恢复

    图案图章工具

      将系统中自带的图案,用图案图章工具显示

      也可以自定图案:新建像素不大的图片,比如10px*10px,然后在此图上画简单图案,画完后点"编辑"—>“定义图案”,点击确定保存,然后在图案图章工具中就可以找到你绘制的图案并进行显示

      印象派效果:是将你选择的图案打散后显示出来的类似油画的效果,用得较少

      可以用来制作图片边框:将图案显示完成后,中间抠掉,替换成其他内容

    展开全文
  • 9-2仿制图章工具

    2015-06-15 09:14:00
    〖S/SHIFT S〗 定义采样点的方法是按住ALT在图像某一处单击 ...这个特点大家要注意,在跨图像复制的时候,除了定义好采样点的位置,也必须看清楚是否选择了正确的图层(如果有多个图层存在的话...
    〖S/SHIFT S〗
    定义采样点的方法是按住ALT在图像某一处单击
    采样点本身是没有层的属性的,它只有坐标属性,这个坐标在哪个图层发生采样作用,就要看所选择的是哪个层。
    这个特点大家要注意,在跨图像复制的时候,除了定义好采样点的位置,也必须看清楚是否选择了正确的图层(如果有多个图层存在的话)。否则就会发生无法复制或错误复制的可能。
     
    图案图章工具

    转载于:https://www.cnblogs.com/yesihoang/p/4576317.html

    展开全文
  • 原文:WPF 控件库——仿制Windows10的进度条 一、其实有现成的  先来看看Windows10进度条的两种模式:    网上有不少介绍仿制Windows10进度条的文章,也都实现了不错的效果。而我再开一文的原因是觉得如果在这...
    原文: WPF 控件库——仿制Windows10的进度条

    一、其实有现成的

      先来看看Windows10进度条的两种模式:

     

     

      网上有不少介绍仿制Windows10进度条的文章,也都实现了不错的效果。而我再开一文的原因是觉得如果在这基础上添加一些功能,比如圆点的数量,圆点的大小等等,效果可能会更好一些。接触过UWP的朋友应该知道,其框架中自带了进度条控件,以 ProgressRing 为例,通过Blend,我们可以获取到控件的XAML,以下是部分截图:

     

      粗略一看,只要稍作修改便能用到WPF中——我们几乎可以什么都不做!

     

    二、添加功能

      如果要更改圆点的数量,圆点的大小或者圆点的移动速度,我们该如何实现呢?继承章节一中的XAML,并根据所需调整模板就显得太麻烦了,这会让我们的样式文件显得臃肿不堪,所以采用纯粹的C#代码来实现它或许比较明智。不过之前的XAML也不是一无是处,至少它给出了环形进度条的关键帧动画的构成,这些信息对我们来说很重要,免去了我们自己去分析的步骤。

      现在我们的主要工作就是让写死的关键帧能够通过属性灵活配置,所以我们可能需要先编码一份进度条的基类( LoadingBase ),以提取两种类型进度条的共性。基类中定义8个属性,分别是 IsRunning 、 DotCount 、 DotInterval 、 DotBorderBrush 、 DotBorderThickness 、 DotDiameter 、 DotSpeed 、 DotDelayTime ,它们的含义已经是自注释的,不必赘述。而在环形进度条中,还有另外两个属性: DotOffSet 和 NeedHidden ,分别表示圆点整体的位置偏移和在运动中是否需要隐藏圆点。

     

    三、关键帧动画

      最后一步就是用C#代码实现关键帧动画,不过得先有米才能做饭,故而需要先创建圆点:

     1 protected Ellipse CreateEllipse(int index)
     2         {
     3             var ellipse = new Ellipse();
     4             ellipse.SetBinding(WidthProperty, new Binding("DotDiameter") {Source = this});
     5             ellipse.SetBinding(HeightProperty, new Binding("DotDiameter") {Source = this});
     6             ellipse.SetBinding(Shape.FillProperty, new Binding("Foreground") {Source = this});
     7             ellipse.SetBinding(Shape.StrokeThicknessProperty, new Binding("DotBorderThickness") {Source = this});
     8             ellipse.SetBinding(Shape.StrokeProperty, new Binding("DotBorderBrush") {Source = this});
     9             return ellipse;
    10         }

      上面的方法在进度条基类中实现,仅仅是用相关的属性初始化了我们的原材料:圆点。由于环形进度条在X、Y轴方向都有移动,所以为了方便,我们可以考虑在圆点外面再包一层 Border 作为看不见的壳,我们将圆点与壳底部对齐,现在只要让壳绕中心旋转就基本实现了目标,下面是环形进度条1个点到5个点带壳的示意图:

      想一想,如果没有这层壳,我们又有什么替代方法,这些方法是否都是极为方便的?可能没有这层壳,就需要去琢磨怎么改变圆点的 RenderTransformOrigin ,好让它们看起来都是围绕一个点旋转的,即使改变了进度条整体的尺寸。套壳的代码如下:

     1 private Border CreateBorder(int index)
     2         {
     3             var ellipse = CreateEllipse(index);
     4             ellipse.HorizontalAlignment = HorizontalAlignment.Center;
     5             ellipse.VerticalAlignment = VerticalAlignment.Bottom;
     6             var rt = new RotateTransform
     7             {
     8                 Angle = -DotInterval * index
     9             };
    10             var myTransGroup = new TransformGroup();
    11             myTransGroup.Children.Add(rt);
    12             var border = new Border
    13             {
    14                 RenderTransformOrigin = new Point(0.5, 0.5),
    15                 RenderTransform = myTransGroup,
    16                 Child = ellipse,
    17                 Visibility = NeedHidden ? Visibility.Collapsed : Visibility.Visible
    18             };
    19             border.SetBinding(WidthProperty, new Binding("Width") { Source = this });
    20             border.SetBinding(HeightProperty, new Binding("Height") { Source = this });
    21 
    22             return border;
    23         }

      套壳代码除了套壳和相关的初始化,最重要的是19和20行的宽高绑定,这是让圆点旋转中心始终唯一的关键。有了以上的准备,我们终于可以开始for循环了:

     1 //定义动画
     2 Storyboard = new Storyboard
     3 {
     4     RepeatBehavior = RepeatBehavior.Forever
     5 };
     6 
     7 for (var i = 0; i < DotCount; i++)
     8 {
     9     //在这里创建圆点  
    10 }

      下面就是最核心的关键帧动画,通过之前用Blend提取出来的XAML,我们可以看到它使用了 SplineDoubleKeyFrame ,这会涉及三次贝塞尔曲线的控制点,考虑到易用性,我们会用 LinearDoubleKeyFrame 和 EasingDoubleKeyFrame 代替。在XAML中我们最关心的关键字应该是角度,在时间片的哪部分,圆点应该在哪儿,而又在什么时候,圆点应该会消失,我们只要随意截取两个点的关键帧就能获得以上所有信息:

     

      上面两张分别是圆点1和2透明度和位置的关键帧截图,通过两个点我们完全可以推断所有点。出于个人喜好,我将透明度替换成了 Visibility 的切换,所以还会引入 DiscreteObjectKeyFrame 。篇幅原因,我们直接总结分析结果:

    • 一开始所有点都是显示的,但是位置不同,从点1的-110度开始,角度逐个减6;
    • 点1开始运动后,0.167秒(1/6秒)后点2开始运动,所以各点动画延迟时间为1/6秒(这里不太能确定是否和圆点数量有关);
    • 以点1为例,旋转角度随时间变化图如下:

      从上面7张图中可以看出,在一次循环中点1是这样运动的:减速、匀速、加速、减速、匀速、加速,而且与之对应的角度位置也给出了,最后水到渠成,环形进度条就完成了。

     

    四、截图

      通过设置不同的属性,可以实现不同的效果:

      

     

    五、源码

      本文所讨论的进度条源码已经在github开源:https://github.com/NaBian/HandyControl

    展开全文
  • 仿制图章工具

    2021-07-17 08:08:37
    4.定义多个仿制源 这就是我简单快速的方法,然后你们可以试试,如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔! 这就是我简单快速的方法,然后你们可以试试,如果有更...
  • 欢迎观看Photoshop教程,小编带大家了解如何使用仿制图章工具从图片中精确移除对象。 如果你需要尽可能准确地复制图片中的细节,以便从图片中移除一些内容时,可以使用 Photoshop 中的仿制图章。我们将使用这个工具...
  • Electron 仿制WeGame(二)

    千次阅读 2018-10-18 19:33:35
    //定义初始化窗口大小 var initW=1280,initH=830; function createForm() { win = new BrowserWindow({ width: initW, //宽度 height: initH, //高度 frame: false, //无边框 center:true, //居中 ...
  • 仿制Windows画图板程序

    2021-06-10 23:50:24
    仿制Windows画图板程序控件代码效果图 控件 新建一个Windows窗体应用程序,将窗体Form1调整到适当大小,在窗体Form1中分别添加1个Panel、1个PictureBox和1个StatusStrip控件,在Panel控件中分别放入3个GroupBox控件...
  • 一、仿制图章工具: 1.找到仿制图章工具,或者按快捷键s,选择需要仿制的内容,按住alt,然后找到需要放置的地方,鼠标拖动即可完成仿制。 一、油桶工具: 1.激活:快捷键:G 2.选择需要填充颜色的位置,单击...
  • Vue仿制移动端QQ音乐(可预览)

    千次阅读 2018-06-05 21:28:30
    ES6提供了class,但它还是没有类,它只是一个基于原型对象的语法糖(本质上...//定义类 class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return '(' + this.x + ', ' + this.y + ...
  • // 定义需要截取图片的位置 int showLeft = 0; int showTop = y; int showRight = mBannerBitmap.getWidth(); int showBottom = y + getHeight(); // 显示在屏幕上view的宽高 int width = getWidth(); int height =...
  • 仿制smarty模板

    2016-06-03 04:49:13
    这是一个仿制的smarty模板 可以给简单变量以及数组变量赋值 在模板中可以使用foreach循环以及if条件语句
  • 首先要定义人物类的几个参数:    vec3 toward;//人物当前朝向 vec3 location;//人物当前位置 如果我们用遍历的方法去搜索,当地图很大的时候,效率是很低的而且游戏体验感不好。那么我们就需要...
  • for i in all_data],[i[2] for i in all_data] #保存数据对 data_pair = [] for i in range(len(lat)): # 定义坐标对应的名称,添加到坐标库中 add_coordinate(name, lng, lat) figure.add_coordinate('坐标{},{}'...
  • 而今天,人家连函数原型都已经定义好了,又有那么多参考资料,虚拟机、开发板这些软硬件开发平台又是那么容易得到,难怪现在 3 个月就能写出一个不错的内核出来了,甚至连一些中学生都跃跃欲试。我们目前看到的漫天...
  • 下图是我仿制的动画: 实现思路 动画的实现 锁图标由白色变成了黑色. 锁的图标我们可以通过 Image 对象加载. 白色变黑色则通过附加在 Image 上的 ColorOverlay 实现. 密码由星号变成明文. 为了让变化自然, 我们对...
  • 按照pink老师讲课的内容,手打的品优购网页 品优购网页设计
  • QT 仿制浏览器,实现功能如下: 1、获取网址时,在标题栏,显示加载进度 2、查看:界面的 放大、缩小、重置 功能 3、界面导航功能:前进、后退、刷新 功能 4、获取网站图标 5、显示历史记录,并提供跳转功能 ...
  • :beating_heart: 《 Netty + JavaFx实战:仿制版微信聊天》 |...并且在此工程中负责约会UI的Jar包,完成UI定义的事件(登录验证,搜索添加好友,对话通知,发送信息等等),以及需要使用我们在服务端工程定义的通信
  • theme)中的theme来做一些简单的定制,也可以在 Builder.setView 方法中设置的布局里面把按钮也放进去,然后定义监听事件;3,使用 AlertDialog.getWindow().setContentView(view); 方法来定制Dialog的布局,这种...
  • #endif”的定义,搞搞清楚是怎么回事: Microsoft-Specific Predefined Macros __cplusplus Defined for C++ programs only.  意思是说,如果是C++程序,就使用 extern "C"{ 而这个东东,是指在下面的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,172
精华内容 868
关键字:

仿制的定义