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

📄 alphalib.pas

📁 维修店名称 陕西申元电子有限公司 店面地址 西安市友谊东路242号西海大厦一层 维修咨询 8008105858(免费) 或 010-64751880
💻 PAS
📖 第 1 页 / 共 3 页
字号:
//怓偲怓偺崌惉偟偨抣傪曉偡
function  TAlpha.GetBlendColor(dest,src,BM : Byte) : Byte;
var
  mode : byte;
begin
  mode := GetBlendMode(BM);
  GetBlendColor := AT[mode,dest,src];
end;

//--------------------------------------------------------------
//攇忬偵曄宍偝偣傞
procedure TAlpha.WaterWave(Dest : TDDDDSurface; rc : Trect; Count : Byte);
var
  jjj,aaa : Integer;
begin
  for jjj := 0 to ((rc.Right - rc.Left) div wq - 1) do
  begin
    aaa := (jjj*wq+Count*4) and $3FF;
    Dest.BltFast(Dest,rc.Left + jjj*wq,rc.Top + ASin[aaa] div 128,
                 rect(rc.Left+jjj*wq,rc.Top,rc.Left+jjj*wq+wq,rc.Bottom),
                 DDBLTFAST_NOCOLORKEY);
  end;
  for jjj := 0 to ((rc.Bottom - rc.Top) div wq - 1) do
  begin
    aaa := (jjj*6*wq+Count*4+360) and $3FF;
    Dest.BltFast(Dest,rc.Left+ASin[aaa] div 128,rc.Top+jjj*wq,
                 rect(rc.Left,rc.Top+jjj*wq,rc.Right,rc.Top+jjj*wq+wq),
                 DDBLTFAST_NOCOLORKEY);
  end;       
end;

//--------------------------------------------------------------
//傇傟岠壥
procedure TALpha.WindNoise(Dest : TDDDDSurface; rc : Trect; Amount : Integer);
var
  iii,aaa : Integer;
begin
  aaa := random($3FF);
  for iii := 0 to ((rc.Bottom-rc.Top) div nq - 1)do
  begin
    Dest.BltFast(Dest,rc.Left+(RT[(aaa+iii) and $3FF]-512) * Amount div 512,
                      rc.Top+iii*nq,
                 rect(rc.Left,rc.Top+iii*nq,rc.Right,rc.Top+iii*nq+nq),
                 DDBLTFAST_NOCOLORKEY);
  end;
end;

//---------------------------------------------------------------
//慖戰椞堟傪巜掕怓偱僽儗儞僪偟傑偡
procedure TAlpha.BlendRect(Dest : TDDDDSurface; rc : Trect;
                          Col,BM : Byte);
var
  dx1,dy1,dx2,dy2 : Integer;
  dddsd:DDSurfaceDesc;
  dpix1,dpix2 :pBYTE;
  jjj,iii,aaa,mode : Integer;
begin
  //Surface偼懚嵼偟偰傞偐偄側丠
  if Dest.IsLost Then Exit;
  //嵗昗傪巊偄傗偡偄宍偵
  dx1 := rc.Left ; dy1 := rc.Top;
  dx2 := rc.Right; dy2 := rc.Bottom;
  //BM乮BlendMethod乯偺抣傪僥亅僽儖憡摉偵曄姺
  mode := GetBlendMode(BM);

  //偼傒弌偟嬛巭
  if (dx1 > dx2)then begin aaa := dx1; dx1 := dx2; dx2 := aaa; end;
  if (dy1 > dy2)then begin aaa := dy1; dx1 := dy2; dy2 := aaa; end;
  if ((dx1 < 0) and (dx2 < 0))then exit;
  if ((dx1 > Dest.Width) and (dx2 > Dest.Width))then Exit;
  if ((dy1 < 0) and (dy2 < 0))then exit;
  if ((dy1 > Dest.Height) and (dy2 > Dest.Height))then Exit;

  if (dx1 < 0)then dx1 := 0;
  if (dy1 < 0)then dy1 := 0;
  if (dx2 > dest.width )then dx2 := dest.Width;
  if (dy2 > dest.Height)then dy2 := dest.Height;
  //Surface傪Lock両
  Dest.Lock(dddsd);
  dpix1:=dddsd.lpSurface;
  //嵗昗傪夋憸儊儌儕忋傾僪儗僗偵曄姺
  Inc(dpix1,dx1*1+dy1*dddsd.lPitch);
  //僾儗儞僨傿儞僌偡傞丅
  for iii := dy1 to dy2-1 do begin
    dpix2 := dpix1;
    for jjj := dx1 to dx2-1 do
    begin
      //崌惉僷儗僢僩偱怓偺崌惉
      dpix2^ := AT[mode,Col,dpix2^];
      //1Pixel恑傔傞
      Inc(dpix2);
    end;
    //1LINE暘偩偗恑傔傞
    Inc(dpix1,dddsd.lPitch);
  end;
  //Surface偺Lock夝彍両
  Dest.Unlock;
end;

//---------------------------------------------------------------
//慖戰椞堟傪巜掕怓偱揾傝偮傇偟傑偡

procedure TAlpha.FillRect(Dest : TDDDDSurface; rc : TRect; col : Byte);
var
  fx : DDBLTFX;
  arc : TRect;
begin
  ZeroMemory(@fx,sizeof(DDBLTFX));
  fx.dwSize:=sizeof(DDBLTFX);
  fx.dwFillColor := col;
  //偼傒弌偟嬛巭
  arc := rc;
  if (arc.Left  < 0         )then arc.Left  := 0;
  if (arc.Right > Dest.Width)then arc.Right := Dest.Width;
  if (arc.Top   < 0          )then arc.Top   := 0;
  if (arc.Bottom> Dest.Height)then arc.Bottom:= Dest.Height;
  //偙偆偟側偄偲徚偟偰偔傟側偄偺偼側偤丠
  Dest.surface.Blt(arc,nil,arc,DDBLT_COLORFILL,fx);
end;

//----------------------------------------------------------------
//Blt偺娙棯斉丅DDBLTFX傪彑庤偵梡堄偟偰偔傟傞偺偱曋棙

procedure TAlpha.Blt(Dest : TDDDDSurface; rc1 : Trect;
                    Src  : TDDDDSurface; rc2 : Trect;
                    dwFlags  : Integer);
var
  fx : DDBLTFX;
begin
  ZeroMemory(@fx,sizeof(DDBLTFX));
  fx.dwSize:=sizeof(DDBLTFX);
  Dest.Blt(Src,rc1,rc2,dwFlags,fx);
end;

//----------------------------------------------------------------
//Put偺娙棯斉丅棙揰偼忋偲摨偠

procedure TAlpha.Blt2(Dest : TDDDDGenSurface; rc1 : Trect;
                     Src  : TDDDDSurface; rc2 : Trect;
                     dwFlags  : Integer);
var
  fx : DDBLTFX;
begin
  ZeroMemory(@fx,sizeof(DDBLTFX));
  fx.dwSize:=sizeof(DDBLTFX);
  Dest.Blt(src,rc1,rc2,dwFlags,fx);
end;



//----------------------------------------------------------------
//慖戰椞堟偺怓抲偒姺偊丒岎姺傪偍偙側偄傑偡

procedure TAlpha.ChangeColor(Dest : TDDDDSurface; rc : Trect;
                          DestCol,SrcCol : Integer);
var
  dx1,dy1,dx2,dy2 : Integer;
  dddsd:DDSurfaceDesc;
  dpix1,dpix2 :pBYTE;
  jjj,iii,aaa : Integer;
begin
  //Surface偼懚嵼偟偰傞偐偄側丠
  if Dest.IsLost Then Exit;
  //嵗昗傪巊偄傗偡偄宍偵
  dx1 := rc.Left ; dy1 := rc.Top;
  dx2 := rc.Right; dy2 := rc.Bottom;

  //偼傒弌偟嬛巭
  if (dx1 > dx2)then begin aaa := dx1; dx1 := dx2; dx2 := aaa; end;
  if (dy1 > dy2)then begin aaa := dy1; dx1 := dy2; dy2 := aaa; end;
  if ((dx1 < 0) and (dx2 < 0))then exit;
  if ((dx1 > Dest.Width) and (dx2 > Dest.Width))then Exit;
  if ((dy1 < 0) and (dy2 < 0))then exit;
  if ((dy1 > Dest.Height) and (dy2 > Dest.Height))then Exit;

  if (dx1 < 0)then dx1 := 0;
  if (dy1 < 0)then dy1 := 0;
  if (dx2 > dest.width )then dx2 := dest.Width;
  if (dy2 > dest.Height)then dy2 := dest.Height;
  //Surface傪Lock両
  Dest.Lock(dddsd);
  dpix1:=dddsd.lpSurface;
  //嵗昗傪夋憸儊儌儕忋傾僪儗僗偵曄姺
  Inc(dpix1,dx1*1+dy1*dddsd.lPitch);
  //僾儗儞僨傿儞僌偡傞丅
  for iii := dy1 to dy2-1 do begin
    dpix2 := dpix1;
    for jjj := dx1 to dx2-1 do
    begin
      //怓偺抲偒姺偊乮srcCol側傜偦偺怓傪destCol偵偡傞乯
      if (dpix2^ = srcCol)then dpix2^ := DestCol;
      //1Pixel恑傔傞
      Inc(dpix2);
    end;
    //1LINE暘偩偗恑傔傞
    Inc(dpix1,dddsd.lPitch);
  end;
  //Surface偺Lock夝彍両
  Dest.Unlock;
end;

//----------------------------------------------------------------
//僼僅儞僩昞帵
//TFontStyles偺愝掕曽朄偼... [fsBold,fsItalic,fsUnderline,fsStrikeout]偩傛
procedure TAlpha.TextOut(dest : TDDDDSurface;x,y : Integer; aaa : String;
                         RGBcolor : LongInt; size : Byte; Style : TFontStyles);
var
  cv : tddddCanvas;
begin
  cv := TDDDDCanvas.Create(dest);
  cv.Font.Name := FontName;
  cv.Font.Size := size;
  cv.Font.Style := Style;
  cv.Font.Color := $02000000 or RGBcolor;
  cv.brush.Style := bsClear;  //攚宨怓偼彂偐側偄
  cv.TextOut(x,y,aaa);
  cv.free;
end;

//----------------------------------------------------------------
//偪傚偭偲偟偨傕偺丅偊傜乣夞旔曽
function TAlpha.LoadBMP(FileName : string; DS : TDDDDSurface) : Boolean;
begin
  if (FileExists(FileName) = True)then
  begin
    DS.LoadBMP(FileName);
    LoadBMP := True;
  end
  else
  begin
    LoadBMP := False;
  end;
end;
//----------------------------------------------------------------
//慖戰椞堟偵僲僀僘傪壛偊傑偡

procedure TAlpha.Noise(Dest : TDDDDSurface;
                      rc : TRect; Space : Integer; Col,BM : Byte);
var
  dx1,dy1,dx2,dy2,xxx : Integer;
  dddsd:DDSurfaceDesc;
  dpix1,dpix2 :pBYTE;
  jjj,iii,aaa,bbb,aspace : Integer;
  mode : Byte;
begin
  //Surface偼懚嵼偟偰傞偐偄側丠
  if Dest.IsLost Then Exit;
  //BM乮BlendMethod乯偺抣傪僥亅僽儖憡摉偵曄姺
  mode := GetBlendMode(BM);
  //嵗昗傪巊偄傗偡偄宍偵
  dx1 := rc.Left ; dy1 := rc.Top;
  dx2 := rc.Right; dy2 := rc.Bottom;
  aspace := space;
  if (space = 0)then aspace := 1;

  //偼傒弌偟嬛巭
  if (dx1 > dx2)then begin aaa := dx1; dx1 := dx2; dx2 := aaa; end;
  if (dy1 > dy2)then begin aaa := dy1; dx1 := dy2; dy2 := aaa; end;
  if ((dx1 < 0) and (dx2 < 0))then exit;
  if ((dx1 > Dest.Width) and (dx2 > Dest.Width))then Exit;
  if ((dy1 < 0) and (dy2 < 0))then exit;
  if ((dy1 > Dest.Height) and (dy2 > Dest.Height))then Exit;

  if (dx1 < 0)then dx1 := 0;
  if (dy1 < 0)then dy1 := 0;
  if (dx2 > dest.width )then dx2 := dest.Width;
  if (dy2 > dest.Height)then dy2 := dest.Height;
  //Surface傪Lock両
  Dest.Lock(dddsd);
  dpix1:=dddsd.lpSurface;
  //嵗昗傪夋憸儊儌儕忋傾僪儗僗偵曄姺
  Inc(dpix1,dx1*1+dy1*dddsd.lPitch);
  aaa := random($3FF);
  //僾儗儞僨傿儞僌偡傞丅
  for iii := dy1 to dy2-1 do begin
    dpix2 := dpix1;
    xxx := dx1;
    for jjj := dx1 to dx2-1 do 
    begin
      inc(aaa);
      aaa := aaa and $3FF;
      bbb := (RT[aaa] * aSpace) shr 10 + 2;
      inc(xxx,bbb);
      if (xxx < dx2)then
      begin
        inc(xxx);
        inc(dpix2,bbb);
        dpix2^ := AT[Mode,Col,dpix2^];
        inc(dpix2);
        dpix2^ := AT[Mode,Col,dpix2^];
      end
      else Break;
    end;
    //1LINE暘偩偗恑傔傞
    Inc(dpix1,dddsd.lPitch);
  end;
  //Surface偺Lock夝彍両
  Dest.Unlock;
end;


//-----------------------------------------------------------------------------------
//摟柧搙傪巜掕偱偒傞崌惉
//偨偩偟丄CPU偵偐偗傞晧扴偑戝偒偔抶偄ゥ

⌨️ 快捷键说明

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