RT

解决方案 »

  1.   

    利用第三方控件 Graphics32 来实现
    http://www.ccrun.com/view.asp?id=458
      

  2.   

    利用第三方控件 Graphics32 来实现 
      

  3.   

    type
      TARGBRect = packed record
        Blue, Green, Red, Alpha: Byte;
      end;
    var
      I, x, y: Integer;
      bmp: TGpBitmap;
      bg: TGpGraphics;
      Data: TBitmapData;
      P: PInteger;
    begin
      DoubleBuffered := True;
      bmp := TGpBitmap.Create('0.bmp');
      try
        Data := bmp.LockBits(GpRect(0, 0, W, H), [imRead, imWrite], pf32bppARGB);
        P := Data.Scan0;
        for y := 1 to Data.Height do
          for x := 1 to Data.Width do
          begin
            // 计算不透明度
            with TARGBRect(P^) do
            Alpha := Max(Red, Max(Green, Blue));
            //Alpha := (Red + Green + Blue) div 3;
            //Alpha := (306 * Red + 601 * Green + 117 * Blue) div 1024;
            Inc(P);
          end;
        bmp.UnlockBits(Data);
        bg := TGpGraphics.Create(form1.Canvas.Handle);
        bg.DrawImage(bmp, 0, 0, bmp.wideh, bmp.Height);
      end;
      finally
        bg.Free;
        bmp.Free;
      end;
    end;