小弟接一活,有部分用到标题所说的效果,我自己是用循环一个点一个点的按下面工式实现的。很慢,有没有快速的算法。工式如下:前景r*百分比+背景r*(1-百分比)
前景g*百分比+背景g*(1-百分比)
前景b*百分比+背景b*(1-百分比)

解决方案 »

  1.   

    没看懂你的公式
    前景背景是什么东西啊?不过也无所谓,如果你一个点一个点画成功的话
    有个方法可以极大地提高效率
    那就是用ScanLinevar
      p3:pbyteArray;
    begin
      with Bitmap do
        for j:=0 to Height-1 do
        begin
          P:=ScanLine[j];
          for i:=0 to width-1 do
          begin
             p[i* 3]:=      //兰 
             P[i* 3 + 1]:=  //绿
            P[i* 3 + 2]:=  //红  
          end;
       end;
    end;你可以试一下
      

  2.   

    这个我知道,但是ScanLine不能正确处理256色的图片,我试过。我可不能要求图片一定是真彩呀。
    解释一下公式
    前景r、前景g、前景b分别是前面那张图片的三原色的16位值,由图片的每个像素TColor值求得,背景就是后面那张图片。
      

  3.   

    建议用ImageEn组件可以实现你的要求
      

  4.   

    或者用gif组件,可以控制透明,你可以把底图放下面,gif图放上面重叠,然后拷屏一次就OK了
      

  5.   

    我自己尝试用openGL吧,VCL达不到要求