zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    第二十三讲:访问者模式
    第二十二讲:备忘录模式
    第二十讲:迭代模式
    第十九讲:职责链模式
    第十八讲:中介者模式
    UTC时间、GMT时间、本地时间、Unix时间戳
    【基础】SQL Server系统库的作用
    【基础】SQL Server系统库的作用
    【基础】SQL Server系统库的作用
    【收集】C#一些基础的面试题
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/6245746.html
Copyright © 2011-2022 走看看