TBitmapSurface.StretchFrom
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的更多相关文章
- FMX保存JPG格式的Stream
刚刚看以前的笔记,估计这个用的人很少 var surf:TBitmapSurface; astream:TmemoryStream; begin surf:=TbitmapSurface.Create ...
- FireMonkey 保存图片到JPG的方法 BMP转JPG
习惯VCL的做法了,到了FireMonkey里面,好像查不到单独的JPEG单元了,不少朋友就郁闷如何处理JPG了,这么大件事,不可能没有处理方法的,具体就请看代码: uses FMX.Surfaces ...
- Android实例-调用系统APP(XE10+小米2)
相关资料:群号383675978 实例源码: unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, Sys ...
- delphi BitmapCompress
unit Unit2; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Va ...
- 你该知道的 TValue
你该知道的 TValue Represents a lightweight version of the Variant type. TValue is a data structure that c ...
- c++builder Delphi 直接使用剪贴板 Clipboard
c++builder Delphi 直接使用剪贴板 Clipboard 剪贴板 delphi use Vcl.Clipbrd procedure TForm27.FormCreate(Sender: ...
- [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴
[FMX]在你的跨平台应用中使用剪贴板进行复制粘贴 2017-08-10 • Android.C++ Builder.Delphi.iOS.教程 • 暂无评论 • swish •浏览 516 次 VC ...
- FMX解析BMP文件工厂
unit FMX.Canvas.D2D; initialization TTextLayoutManager.RegisterTextLayout(TTextLayoutD2D, TCanvasD2 ...
- delphi xe10 中使用剪贴板(跨平台)
VCL 中如何使用剪贴板咱就不说了,FMX 做为一个新的框架,提供了跨平台的剪贴板支持.FMX 对剪贴板的支持来自两个接口: IFMXClipboardService:位于 FMX.Platform. ...
随机推荐
- Zend Framework 1 - Quick Start
创建 Zend 项目 要创建 Zend 项目,首先要下载并解压 Zend Framework. 安装 Zend Framework 下载最新的 Zend Framework 1.12.20 源码包,( ...
- 华为5G空口新技术(2015年)
2015-03-24 长江后浪推前浪,4G建设方兴未艾,业界关于5G的讨论已如火如荼.对于每一代移动通信,空口技术都相当于王冠上的明珠. 在月初的世界移动通信大会上,华为发布了面向5G的新空口,并展出 ...
- Android国际化--I18N
在res下创建对应国家的环境的目录如:values-zh,values-en,然后在对应的目录下将对应的字符串翻译成对应国家的语言即可.
- 【转】Windows平台下的Subversion安装配置新手指南
原文地址:http://developer.51cto.com/art/201005/199628.htm 本文介绍Subversion安装配置快速指南,首先讲Subversion的安装和配置,Uni ...
- Ajax跨域实现
Ajax Ajax,Asynchronus JavaScript and XML,字母意思:异步的 JavaScript 和 XML,是指一种创建交互式网页应用的网页开发技术.用于异步地去获取XML作 ...
- openvpn 启动
安装 yum -y install openvpn 配置文件可以放在: /etc/openvpn 例如,我这里的路径: [mslagee@centos-dev ~]$ cd /etc/openvpn/ ...
- Netty_UDP丢包解决
程序背景 程序是Java编写,基于Netty框架写的客户端及服务端. 现象 客户端大数据量持续发UDP数据,作为UDP服务器出现了部分数据频繁丢失触发程序自身重传逻辑. 通过GC日志对比发现丢包的时间 ...
- Javascript判断object还是list/array的类型(包含javascript的数据类型研究)
前提:先研究javascript中的变量有几种,参考: http://www.w3school.com.cn/js/js_datatypes.asp http://glzaction.iteye.co ...
- R for循环之break,next
next跳出本次循环 break跳出本层循环(当有多个for 循环时,即跳出最近的一个for循环)
- Average Precision of VOC
转一篇文章,主要是关于VOC中Average Precision指标的 原文出处:https://sanchom.wordpress.com/tag/average-precision/ 还有一篇文章 ...