如题

解决方案 »

  1.   

    对于一个TColor
    例如 c:=$04030201
    一种算法:(04+03+02+01) div 4 = 2
    然后转换后的颜色 cc:= $02020202但是我认为颜色是RGB,只有030202才有效
    应该是:(03+02+01) div 3 = 2;
    cc:=$04020202
    最前面一位保留希望高手能给个解释
      

  2.   

    我在一本书上看到:
      grayvalue:=0.3*rvalue+0.3*gvalue+0.3*bvalue;
      第二种是取平均值
      grayvalue:=integer((rvalue+bvalue+gvalue)/3)
      

  3.   

    承上。
      如果tcolor值用4个字节的十六进制数表示,则第2,3,4个字节分别为蓝、绿、红的分量。
      

  4.   

    http://expert.csdn.net/Expert/topic/1157/1157906.xml
      

  5.   

    不是很明白题意$xx:xx:xx:xx第一字节是 windows 使用, 
    1 是用色板最接近显
    0 是不对 color 作任何形式的转换直接显示, 有时我在想这样的设置是否有效,在色板中没有的色素如何显示,一定要有一种形式上的转换
    最有效的灰度算法就是在 R, G, B 三色上减一个百分比,这样还能保持原色彩
    比方
    R := R * 0.75
    G := G * 0.75
    B := B * 0.75function GaryColor(Color :TColor; Value :Byte = 210) :TColor;
    var
      R, G, B :Byte;
    begin
      R := (Color and $000000FF);
      G := (Color and $0000FF00) Shr 8;
      B := (Color and $00FF0000) Shr 16;  R := R - Round(R * (Value / 255));
      G := G - Round(G * (Value / 255));
      B := B - Round(B * (Value / 255));  Result := RGB(R, G, B);
    end;最有效的 Hightlight 算法就是在R, G, B 三色上加一个相对纯色百分比function HighlightColor(Color :TColor; Value :Byte = 210) :TColor;
    var
      R, G, B :Byte;
    begin
      R := (Color and $000000FF);
      G := (Color and $0000FF00) Shr 8;
      B := (Color and $00FF0000) Shr 16;  R := R + Round((255 - R) * (Value / 255));
      G := G + Round((255 - G) * (Value / 255));
      B := B + Round((255 - B) * (Value / 255));  Result := RGB(R, G, B);
    end;
      

  6.   

    十分感谢ehom,你要相关的资料说明吗?
      

  7.   

    资料可以用google找!公式就强行记住!Red*0.299+Green*0.587+Blue*0.114因为最后都要取整!
    Red*0.3+Green*0.59+Blue*0.11
    (Red*3+Green*6+Blue*1)/10
    都可!主要是可以减少浮点运算的次数!
      

  8.   

    应是:grayvalue:=0.3*rvalue+0.59*gvalue+0.11*bvalue;
       写错了