⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teblndwk.pas

📁 Do your applications look a little boring? Would you like to get spectacular yet easy to use visual
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit teBlndWk;

interface

{$INCLUDE teDefs.inc}

uses
  {$IFDEF WIN32}
  Windows, Messages,
  {$ENDIF WIN32}
  SysUtils, Classes, teRender,
  {$ifdef CLX}
  QT, QGraphics;
  {$else}
  Graphics;
  {$endif CLX}

const

  Mask_32_1 = $7F7F7F7F;
  Mask_32_2 = $3F3F3F3F;
  Mask_32_3 = $1F1F1F1F;
  Mask_32_4 = $0F0F0F0F;

  Mask_16_1 = $7BEF7BEF;
  Mask_16_2 = $39E739E7;
  Mask_16_3 = $18E318E3;
  Mask_16_4 = $08610861;

  {$ifndef CLX}
  Mask_15_1 = $3DEF3DEF;
  Mask_15_2 = $1CE71CE7;
  Mask_15_3 = $0C630C63;
  Mask_15_4 = $04210421;
  {$endif CLX}

  procedure StandardFuseFrame(BrushBmp: TBitmap; CurrentFrame: Integer);
  procedure BlendBmps(WorkBmp, DstBmp, SrcBmp, BrushBmp: TBitmap;
    PixelFormat: TPixelFormat; Level, EqualQuads: Integer);
  procedure BlendBmp(Bmp, BrushBmp: TBitmap; PixelFormat: TPixelFormat;
    Color: TColor; R: TRect; Level: Integer);

implementation

var
  ColorBlendArrayRed,
  ColorBlendArrayGreen,
  ColorBlendArrayBlue: array[0..255] of Byte;
  ColorBlendArrayRedValue,
  ColorBlendArrayGreenValue,
  ColorBlendArrayBlueValue,
  ColorBlendArrayLevel: Byte;
  ColorBlendArrayPixelFormat: TPixelFormat;
  ColorBlendArrayInitialized: Boolean = False;

procedure StandardFuseFrame(BrushBmp: TBitmap; CurrentFrame: Integer);
const
  PixelArray: array[1..64*2] of byte =
    (4, 4,
     0, 0,
     4, 0,
     0, 4,
     6, 6,
     2, 2,
     6, 2,
     2, 6,
     6, 4,
     2, 0,
     6, 0,
     2, 4,
     4, 6,
     0, 2,
     4, 2,
     0, 6,
     5, 7,
     1, 3,
     5, 3,
     1, 7,
     7, 5,
     3, 1,
     7, 1,
     3, 5,
     7, 7,
     3, 3,
     7, 3,
     3, 7,
     5, 5,
     1, 1,
     5, 1,
     1, 5,
     5, 4,
     1, 0,
     5, 0,
     1, 4,
     7, 6,
     3, 2,
     7, 2,
     3, 6,
     7, 4,
     3, 0,
     7, 0,
     3, 4,
     5, 6,
     1, 2,
     5, 2,
     1, 6,
     6, 7,
     2, 3,
     6, 3,
     2, 7,
     4, 5,
     0, 1,
     4, 1,
     0, 5,
     4, 7,
     0, 3,
     4, 3,
     0, 7,
     6, 5,
     2, 1,
     6, 1,
     2, 5);
begin
  {$ifndef CLX}
  BrushBmp.Canvas.Pixels[
    PixelArray[(CurrentFrame*2)-1], PixelArray[CurrentFrame*2]] := clBlack;
  {$endif CLX}
end;

procedure TEAlphaBlendMMX(Work, Dst, Src: Pointer; Size, Alpha: Integer);
{$ifdef TrialLimited}begin end;{$else}
type
  TEAlphaBlendMMXProc = procedure(Work, Dst, Src: Pointer; Size, Alpha: Integer);
const
  Body: array[1..364] of Byte = (
    $55,                     
    $8B,$EC,                 
    $57,                     
    $56,                     
    $53,                     

    $89,$D7,                 
    $89,$CE,                 
    $89,$C3,                 

    $8B,$4D,$0C,             
    $C1,$E9,$0C,             
    $C1,$E1,$09,             

    $0F,$84,$94,$00,$00,$00, 

    $8D,$3C,$CF,             
    $8D,$34,$CE,             
    $8D,$1C,$CB,             

    $F7,$D9,                 

    $0F,$EF,$C0,             

    $0F,$6E,$4D,$08,         
    $0F,$61,$C9,             
    $0F,$62,$C9,             

    $B8,$40,$00,$00,$00,     
    $81,$C1,$00,$02,$00,$00, 

    $8B,$54,$CE,$E0,         
    $8B,$54,$CE,$C0,         
    $83,$E9,$08,             
    $48,                     
    $75,$F2,                 

    $81,$C1,$00,$02,$00,$00, 
    $B8,$40,$00,$00,$00,     

    $8B,$54,$CF,$E0,         
    $8B,$54,$CF,$C0,         
    $83,$E9,$08,             
    $48,                     
    $75,$F2,                 
    $B8,$00,$02,$00,$00,     

    $0F,$6F,$14,$CF,         

    $0F,$6F,$1C,$CE,         
    $0F,$6F,$E2,             

    $0F,$60,$D0,             
    $0F,$6F,$EB,             

    $0F,$60,$D8,             

    $0F,$F9,$D3,             

    $0F,$D5,$D1,             
    $0F,$68,$E0,             

    $0F,$6F,$F5,             
    $0F,$68,$E8,             

    $0F,$F9,$E5,             

    $0F,$D5,$E1,             
    $0F,$71,$D2,$08,         

    $0F,$71,$D4,$08,         

    $0F,$67,$D4,             

    $0F,$FC,$D6,             

//  db $0F,$7F,$14,$CB       
    $0F,$E7,$14,$CB,         
    $83,$C1,$01,             

    $48,                     
    $75,$BF,                 

    $09,$C9,                 
    $7C,$84,                 

    $8B,$4D,$0C,             

    $81,$E1,$F8,$0F,$00,$00, 
    $C1,$E9,$03,             

    $74,$4D,                 

    $8D,$3C,$CF,             
    $8D,$34,$CE,             
    $8D,$1C,$CB,             

    $F7,$D9,                 

    $0F,$6F,$14,$CF,         

    $0F,$6F,$1C,$CE,         
    $0F,$6F,$E2,             

    $0F,$60,$D0,             
    $0F,$6F,$EB,             

    $0F,$60,$D8,             

    $0F,$F9,$D3,             

    $0F,$D5,$D1,             
    $0F,$68,$E0,             

    $0F,$6F,$F5,             
    $0F,$68,$E8,             

    $0F,$F9,$E5,             

    $0F,$D5,$E1,             
    $0F,$71,$D2,$08,         

    $0F,$71,$D4,$08,         

    $0F,$67,$D4,             

    $0F,$FC,$D6,             

//  db $0F,$7F,$14,$CB       
    $0F,$E7,$14,$CB,         
    $83,$C1,$01,             

    $09,$C9,                 
    $7C,$BE,                 

    $8B,$45,$0C,             
    $83,$E0,$04,             
    $74,$4D,                 

    $8B,$07,                 
    $8B,$16,                 
    $25,$00,$FF,$00,$FF,     
    $81,$E2,$00,$FF,$00,$FF, 
    $C1,$E8,$08,             
    $C1,$EA,$08,             
    $29,$D0,                 
    $0F,$AF,$45,$08,         
    $C1,$E8,$08,             
    $01,$D0,                 
    $C1,$E0,$08,             
    $25,$00,$FF,$00,$FF,     

    $8B,$0F,                 
    $8B,$16,                 
    $81,$E1,$FF,$00,$FF,$00, 
    $81,$E2,$FF,$00,$FF,$00, 
    $29,$D1,                 
    $0F,$AF,$4D,$08,         
    $C1,$E9,$08,             
    $01,$D1,                 
    $81,$E1,$FF,$00,$FF,$00, 

    $09,$C1,                 
    $89,$0B,                 

    $5B,                     
    $5E,                     
    $5F,                     

    $0F,$AE,$FF,             
    $0F,$77,                 
    $5D,                     
    $C2,$08,$00,             
    $90);                    
var
  BC: PByteArray;
begin
  GetMem(BC, SizeOf(Body));
  try
    CopyMemory(@(BC[0]), @Body, SizeOf(Body));
    if not TEProcessorInfo.SSE then
    begin
      PByte(@BC[162])^ := $7F;
      PByte(@BC[256])^ := $7F;
      PByte(@BC[354])^ := $90;
      PByte(@BC[355])^ := $90;
      PByte(@BC[356])^ := $90;
    end;

    TEAlphaBlendMMXProc(BC)(Work, Dst, Src, Size, Alpha);
  finally
    FreeMem(BC);
  end;
end;
{$endif TrialLimited}

procedure TEAlphaBlendAsm(Work, Dst, Src: Pointer; PixelFormat: TPixelFormat;
  Size, Alpha, EqualPerc: Integer; IsColor: Boolean; Color: TColor);
type
  TAlphaBlendAsmProc = procedure(Work, Dst, Src:Pointer);
const
  CommonBody1: array[1..30] of Byte = (
    $53,                     
    $57,                     
    $56,                     
    $55,                     
    $89,$D7,                 
    $89,$CE,                 
    $EB,$14,                 
    $83,$C0,$04,             
    $83,$C6,$04,             
    $83,$C7,$04,             
    $3D,$67,$45,$23,$01,     
    $0F,$84,$51,$00,$00,$00);
  BodyMemCmp: array[1..8] of Byte = (
    $8B,$0F,                 
    $8B,$16,                 
    $39,$D1,                 
    $74,$E4);                
  BodyMemNoCmp: array[1..4] of Byte = (
    $8B,$0F,                 
    $8B,$16);                
  BodyColorCmp1: array[1..11] of Byte = (
    $B9,$67,$45,$23,$01,     
    $8B,$16,                 
    $39,$D1,                 
    $74,$E1);                
  BodyColorCmp2: array[1..11] of Byte = (
    $8B,$0F,                 
    $BA,$67,$45,$23,$01,     
    $39,$D1,                 
    $74,$E1);                
  BodyColorNoCmp1: array[1..7] of Byte = (
    $B9,$67,$45,$23,$01,     
    $8B,$16);                
  BodyColorNoCmp2: array[1..7] of Byte = (
    $8B,$0F,                 
    $BA,$67,$45,$23,$01);    
  CommonBody2: array[1..38] of Byte = (
    $89,$CB,                 
    $89,$D5,                 
    $81,$E3,$00,$FF,$00,$FF, 
    $81,$E5,$00,$FF,$00,$FF, 
    $C1,$EB,$08,             
    $81,$E1,$FF,$00,$FF,$00, 
    $C1,$ED,$08,             
    $81,$E2,$FF,$00,$FF,$00, 
    $29,$D1,                 
    $29,$EB                  
    );
  CommonBody3: array[1..48] of Byte =
    (
    $01,$EB,                 
    $01,$D1,                 
    $C1,$E3,$08,             
    $81,$E1,$FF,$00,$FF,$00, 
    $81,$E3,$00,$FF,$00,$FF, 
    $83,$C7,$04,             
    $09,$D9,                 
    $83,$C6,$04,             
    $89,$08,                 
    $83,$C0,$04,             
    $3D,$67,$45,$23,$01,     
    $0F,$85,$AF,$FF,$FF,$FF, 
    $5D,                     
    $5E,                     
    $5F,                     
    $5B,                     
    $C3);                    

  function BodyDst(Data: PByteArray; DoComp, IsColor, Exchange: Boolean;
    Color: DWord): Integer;
  begin
    if IsColor
    then
    begin
      if Exchange
      then
      begin
        if DoComp
        then
        begin
          CopyMemory(Data, @BodyColorCmp2, SizeOf(BodyColorCmp2));
          Result := SizeOf(BodyColorCmp2);
        end
        else
        begin
          CopyMemory(Data, @BodyColorNoCmp2, SizeOf(BodyColorNoCmp2));
          Result := SizeOf(BodyColorNoCmp2);
        end;
        PDWord(@Data[3])^ := Color;
      end
      else
      begin
        if DoComp
        then
        begin
          CopyMemory(Data, @BodyColorCmp1, SizeOf(BodyColorCmp1));
          Result := SizeOf(BodyColorCmp1);
        end
        else
        begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -