如题

解决方案 »

  1.   

    procedure Gray(bmp: TBitmap);
    var
      p: PByteArray;
      w: Integer;
      i, j: Integer;
    begin
      bmp.pixelformat := pf24bit;
      for i := 0 to bmp.height - 1 do
      begin
        p := bmp.scanline[i];
        j := 0;
        while j < (bmp.width-1) * 3 do
        begin
          w :=(p[j] * 28 + p[j+1] * 151 + p[j+2]*77);
          w := w shr 8;
          p[j] := byte(w);
          p[j+1] := byte(w);
          p[j+2] := byte(w);
          inc(j, 3)
        end;
      end;
    end;
      

  2.   

    procedure Twist(var Bmp, Dst: TBitmap; Amount: integer);
    var
      fxmid, fymid : Single;
      txmid, tymid : Single;
      fx,fy : Single;
      tx2, ty2 : Single;
      r : Single;
      theta : Single;
      ifx, ify : integer;
      dx, dy : Single;
      OFFSET : Single;
      ty, tx             : Integer;
      weight_x, weight_y     : array[0..1] of Single;
      weight                 : Single;
      new_red, new_green     : Integer;
      new_blue               : Integer;
      total_red, total_green : Single;
      total_blue             : Single;
      ix, iy                 : Integer;
      sli, slo : PBytearray;  function ArcTan2(xt,yt : Single): Single;
      begin
        if xt = 0 then
          if yt > 0 then
            Result := Pi/2
          else
            Result := -(Pi/2)
        else begin
          Result := ArcTan(yt/xt);
          if xt < 0 then
            Result := Pi + ArcTan(yt/xt);
        end;
      end;