RGB方式的 怎么计算叠加后的颜色

解决方案 »

  1.   

    Function NewColor(color1,color2:Tcolor):TColor;
    type
    TRGB=packed record
      R:Byte ;
      G:Byte ;
      B:Byte ;
      A:Byte ;
    end ;
    var
      p1:^TRGB ;
      p2:^TRGB ;
      P3:^TRGB ;
    begin
      Result := color1 ;
      P1 :=@color1 ;
      P2 :=@color2 ;
      P3 := @Result ;
      p3.R := (P1^.R+P2^.R) div 2 ;
      p3.G := (P1^.G+P2^.G) div 2 ;
      p3.B := (P1^.B+P2^.B) div 2 ;
    end;
      

  2.   

    p3.R := (P1^.R+P2^.R) div 2 ;
      p3.G := (P1^.G+P2^.G) div 2 ;
      p3.B := (P1^.B+P2^.B) div 2 ;这个写法是否存在溢出问题?
    都是Byte,
    试想:
    P1^.R:= 127;
    P2^.R:= 127;
    那么 p3.R= (127+127) div 2= 254 div 2 = 127但是如果
    P1^.R:= 128;
    P2^.R:= 128;
    那么 p3.R= (128+128) div 2= 0 div 2 = 0;
     (Byte 的256就是0 ,因为溢出了)是不是存在这个问题?
      

  3.   

    pazee(耙子) 
    >>你錯了, 兩個Byte 求平均數是不會溢出的(128+128) div 2<> 0!!!!
    (128+128) div 2 = 128 !!    :)