我在做一个处理图片的模块,请各位大虾指点。

解决方案 »

  1.   

    canvas的TransparentMode
    你看看这个,如果需要更多的特效,就需要自己写代码,所谓明暗就是为了欺骗人的眼睛,你可以对没个像素做处理,这样可以给人整体上的效果
      

  2.   

    Procedure Contrast(Var clip: tbitmap; Amount: Integer);
    Function IntToByte(i: Integer): Byte;
    Begin
      If i > 255 Then Result := 255
      Else If i < 0 Then Result := 0
      Else Result := i;
    End;
    Var
      p0: pbytearray;
      rg, gg, bg, r, g, b, x, y: Integer;
    Begin
      For y := 0 To clip.Height - 1 Do
        Begin
          p0 := clip.scanline[y];
          For x := 0 To clip.Width - 1 Do
            Begin
              r := p0[x * 3];
              g := p0[x * 3 + 1];
              b := p0[x * 3 + 2];
              rg := (Abs(127 - r) * Amount) Div 255;
              gg := (Abs(127 - g) * Amount) Div 255;
              bg := (Abs(127 - b) * Amount) Div 255;
              If r > 127 Then r := r + rg Else r := r - rg;
              If g > 127 Then g := g + gg Else g := g - gg;
              If b > 127 Then b := b + bg Else b := b - bg;
              p0[x * 3] := IntToByte(r);
              p0[x * 3 + 1] := IntToByte(g);
              p0[x * 3 + 2] := IntToByte(b);
            End;
        End;
    End;
      

  3.   

    对楼上代码的一点必要补充
    // Clip.PixelFormat:=pf24BIT;如果是8位图,那么下面的算法错
    For y := 0 To clip.Height - 1 Do
        Begin
          p0 := clip.scanline[y];
          For x := 0 To clip.Width - 1 Do
            Begin
    ...............