Firemonkey 图片显示拉伸不变形
Firemonkey 实现简单的图片拉伸不变形,是利用原始图片的 "固定区" 及 "位伸区" 来达到此目的,因此必需要有此结构的图片才适合。 下面以聊天气泡为例,下图四个角为固定区,就是拉伸时,这四个区是不变的,而拉伸区,会自动依位伸的大小自动位伸: 实作效果: 代码,直接扩展 Canvas 功能: <span style="color: #0000ff;">unit <span style="color: #000000;"> FMX.Graphics.Helper; <span style="color: #0000ff;">interface<span style="color: #0000ff;">uses <span style="color: #000000;">System.Types,FMX.Graphics; <span style="color: #0000ff;">type<span style="color: #000000;"> TCanvasHelper = <span style="color: #0000ff;">class helper <span style="color: #0000ff;">for<span style="color: #000000;"> TCanvas<span style="color: #008000;">//<span style="color: #008000;"> 图片四角张缩 <span style="color: #0000ff;">procedure<span style="color: #000000;"> DrawBitmapCapInsets( <span style="color: #0000ff;">const Bitmap1: TBitmap; <span style="color: #008000;">//<span style="color: #008000;"> 图片 <span style="color: #0000ff;">const DesRect: TRectF; <span style="color: #008000;">//<span style="color: #008000;"> 目的区域 <span style="color: #0000ff;">const CapInsetsRect: TRectF; <span style="color: #008000;">//<span style="color: #008000;"> 四角区域 <span style="color: #0000ff;">const Opacity: Single = <span style="color: #800080;">1.0; <span style="color: #008000;">//<span style="color: #008000;"> 透明度 <span style="color: #0000ff;">const HighSpeed: Boolean = False); <span style="color: #008000;">//<span style="color: #008000;"> 高速 <span style="color: #0000ff;">end<span style="color: #000000;">; <span style="color: #0000ff;">implementation <span style="color: #008000;">//<span style="color: #008000;"> 图片四角张缩
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,RectF(SrcRect.Left,SrcRect.Top,SrcRect.Left +<span style="color: #000000;"> CapInsetsRect.Left,SrcRect.Top +<span style="color: #000000;"> CapInsetsRect.Top),RectF(DesRect.Left,DesRect.Top,DesRect.Left +<span style="color: #000000;"> CapInsetsRect.Left,DesRect.Top +<span style="color: #000000;"> CapInsetsRect.Left),Opacity,HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,RectF(SrcRect.Right -<span style="color: #000000;"> CapInsetsRect.Right,SrcRect.Right,RectF(DesRect.Right -<span style="color: #000000;"> CapInsetsRect.Right,DesRect.Right,DesRect.Top +<span style="color: #000000;"> CapInsetsRect.Top),HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,SrcRect.Bottom -<span style="color: #000000;"> CapInsetsRect.Bottom,SrcRect.Bottom),DesRect.Bottom -<span style="color: #000000;"> CapInsetsRect.Bottom,DesRect.Bottom),HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,SrcRect.Top +<span style="color: #000000;"> CapInsetsRect.Top,SrcRect.Bottom -<span style="color: #000000;"> CapInsetsRect.Bottom),DesRect.Top +<span style="color: #000000;"> CapInsetsRect.Top,DesRect.Bottom -<span style="color: #000000;"> CapInsetsRect.Bottom),HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,RectF(SrcRect.Left +<span style="color: #000000;"> CapInsetsRect.Left,SrcRect.Right -<span style="color: #000000;"> CapInsetsRect.Right,RectF(DesRect.Left +<span style="color: #000000;"> CapInsetsRect.Left,DesRect.Right -<span style="color: #000000;"> CapInsetsRect.Right,HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,HighSpeed);
<span style="color: #000000;"> Self.DrawBitmap(Bitmap1,HighSpeed); <span style="color: #0000ff;">end. 使用方法: <span style="color: #0000ff;">procedure<span style="color: #000000;"> TForm1.PaintBox2Paint(Sender: TObject; Canvas: TCanvas);
<span style="color: #0000ff;">begin<span style="color: #000000;"> Canvas.DrawBitmapCapInsets(Image2.Bitmap,PaintBox2.LocalRect,RectF(<span style="color: #800080;">17,<span style="color: #800080;">14,<span style="color: #800080;">24,<span style="color: #800080;">16<span style="color: #000000;">)); <span style="color: #0000ff;">end; 源码下载: 参考资料: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |