procedure TBitmapSurface.StretchFrom(const Source: TBitmapSurface; const NewWidth, NewHeight: Integer;
APixelFormat: TPixelFormat = TPixelFormat.None);
var
I, J: Integer;
SourceI, SourceJ: Single;
SourceIInt, SourceJInt: Integer;
SourceINext, SourceJNext: Integer;
SourceIOffset, SourceJOffset: Single;
D1, D2, D3, D4: Single;
P1, P2, P3, P4: TAlphaColorF;
Dest: TAlphaColorF;
begin
if APixelFormat = TPixelFormat.None then
APixelFormat := Source.PixelFormat;

SetSize(NewWidth, NewHeight, APixelFormat);

if (Source.Width > 1) and (Source.Width > 1) and (Width > 1) and (Width > 1) then
for I := Width - 1 downto 0 do
for J := 0 to Height - 1 do
begin
SourceI := (I / (Width - 1)) * (Source.Width - 1);
SourceJ := (J / (Height - 1)) * (Source.Height - 1);

SourceIInt := Trunc(SourceI);
SourceJInt := Trunc(SourceJ);
SourceINext := Min(Source.Width - 1, SourceIInt + 1);
SourceJNext := Min(Source.Height - 1, SourceJInt + 1);

SourceIOffset := Frac(SourceI);
SourceJOffset := Frac(SourceJ);

D1 := (1 - SourceIOffset) * (1 - SourceJOffset);
D2 := SourceIOffset * (1 - SourceJOffset);
D3 := SourceIOffset * SourceJOffset;
D4 := (1 - SourceIOffset) * SourceJOffset;

P1 := TAlphaColorF.Create(Source.Pixels[SourceIInt, SourceJInt]);
P2 := TAlphaColorF.Create(Source.Pixels[SourceINext, SourceJInt]);
P3 := TAlphaColorF.Create(Source.Pixels[SourceINext, SourceJNext]);
P4 := TAlphaColorF.Create(Source.Pixels[SourceIInt, SourceJNext]);

Dest := P1 * D1 + P2 * D2 + P3 * D3 + P4 * D4;
SetPixel(I, J, Dest.Clamp.ToAlphaColor);
end;
end;

TBitmapSurface.StretchFrom的更多相关文章

  1. FMX保存JPG格式的Stream

    刚刚看以前的笔记,估计这个用的人很少 var surf:TBitmapSurface; astream:TmemoryStream; begin surf:=TbitmapSurface.Create ...

  2. FireMonkey 保存图片到JPG的方法 BMP转JPG

    习惯VCL的做法了,到了FireMonkey里面,好像查不到单独的JPEG单元了,不少朋友就郁闷如何处理JPG了,这么大件事,不可能没有处理方法的,具体就请看代码: uses FMX.Surfaces ...

  3. Android实例-调用系统APP(XE10+小米2)

    相关资料:群号383675978 实例源码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, Sys ...

  4. delphi BitmapCompress

    unit Unit2; interface uses  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Va ...

  5. 你该知道的 TValue

    你该知道的 TValue Represents a lightweight version of the Variant type. TValue is a data structure that c ...

  6. c++builder Delphi 直接使用剪贴板 Clipboard

    c++builder Delphi 直接使用剪贴板 Clipboard 剪贴板 delphi use  Vcl.Clipbrd procedure TForm27.FormCreate(Sender: ...

  7. [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴

    [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴 2017-08-10 • Android.C++ Builder.Delphi.iOS.教程 • 暂无评论 • swish •浏览 516 次 VC ...

  8. FMX解析BMP文件工厂

    unit FMX.Canvas.D2D; initialization  TTextLayoutManager.RegisterTextLayout(TTextLayoutD2D, TCanvasD2 ...

  9. delphi xe10 中使用剪贴板(跨平台)

    VCL 中如何使用剪贴板咱就不说了,FMX 做为一个新的框架,提供了跨平台的剪贴板支持.FMX 对剪贴板的支持来自两个接口: IFMXClipboardService:位于 FMX.Platform. ...

随机推荐

  1. 【BZOJ 1494】【NOI 2007】生成树计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1494 这道题..因为k很小,而且我们只关心连续的k个节点的连通性,所以把连续的k个点轮廓线上的连通性 ...

  2. Newtonsoft.Json 序列化和反序列化 时间格式【转】

    1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg:   A a=new A(); a.Name="Elain ...

  3. rank()函数的使用

    排序: ---rank()over(order by 列名 排序)的结果是不连续的,如果有4个人,其中有3个是并列第1名,那么最后的排序结果结果如:1 1 1 4select scoreid, stu ...

  4. Java学习笔记(一)

    纯属个人学习笔记,有什么不足之处大家留言,谢谢 Java程序打包与JAR运行方法 在Eclipse的"包资源管理器"视图中找到要打包成JAR文件的项目.在项目名称上单击鼠标右键,在 ...

  5. jsp编码过程

    pageEncoding是jsp文件本身的编码 contentType的charset是指浏览器到服务器发送时使用的编码:以及服务器返回到浏览器使用的编码 JSP要经过三次的“编码” 第一阶段会用JS ...

  6. docker 配置操作指导

    1.下载程序包 安装包 https://github.com/boot2docker/windows-installer/releases(这个地址国内下载很慢) 或这个:http://www.sof ...

  7. javaweb 基于java Servlet登入 简单入门案例

    项目流程 第一步:创建一个java webproject第二步:创建三个界面,1,login.jsp 2 success.jsp 3 fail.jsp第三步:更改新建界面编码格式,utf-8 默然编码 ...

  8. HAOI2017前

    NOIP后想换一个看起来比较高端的博客,于是尝试用github+hexo建站,地址大概是这样的,搞了一周左右.. 最终以失败告终,一是代码高亮有bug,二是数学公式有bug,三是博文没法快速搬迁QAQ ...

  9. matlab 曲线拟合

    曲线拟合(转载:http://blog.sina.com.cn/s/blog_8e1548b80101c9iu.html) 补:拟合多项式输出为str 1.poly2str([p],'x') 2. f ...

  10. SQL 同时查看2个表

    1.要想上下查看2个表,一定要2个表显示的字段数量一致,格式一致 2.格式不一致就统一转换为字符串 -- to_char(s.saleid,'999999999') ,-- to_char(s.upd ...