就是每个点的颜色由一张逐渐变为另一张,必须要一个一个点的计算吗?有没有快一些的算法,取每个点的颜色很慢的。(Canvas.Pixels[x,y],800*600就要取48万个点)最好有现成的组件可以用,望大家帮忙,谢谢。

解决方案 »

  1.   

    当然必须一个一个点计算。 不过这种应用没人会用Pixels[x, y]去进行操作的,都是使用ScanLine的,哪怕需要先从Canvas中复制到临时bmp再通过bmp.ScanLine操作然后再复制回Canvas也比直接操作Canvas.Pixels[x, y]快.
      

  2.   

    百 叶 窗 效 果 ---- 原 理: 将 放 在 暂 存 图 形 的 数 据 分 成 若 干 组, 然 后 依 次 从 第 一 组 到 最 后 一 组 搬 移, 第 一 次 每 组 各 搬 移 第 一 条 扫 描 线 到 可 视 位 图 的 相 应 位 置, 第 二 次 搬 移 第 二 条 扫 描 线, 接 着 搬 移 第 三 条、 第 四 条 扫 描 线. ---- 程 序 算 法: procedure TForm1.Button6Click(Sender: TObject);
    var
     newbmp:TBitmap;
     i,j,bmpheight,bmpwidth:integer;
     xgroup,xcount:integer;
    begin
    newbmp:= TBitmap.Create;
    newbmp.Width:=image1.Width;
    newbmp.Height:=image1.Height;
    bmpheight:=image1.Height;
    bmpwidth:=image1.Width;
    xgroup:=16;
    xcount:=bmpheight div xgroup;
    for i:=0  to xcount do
    for j:=0 to xgroup do
    begin
     newbmp.Canvas.CopyRect(Rect
    (0,xcount*j+i-1,bmpwidth,xcount*j+i),
        image1.Canvas,
        Rect(0,xcount*j+i-1,bmpwidth,xcount*j+i));
    Canvas.Draw(120,100,newbmp);
    end;
    newbmp.Free;
    end;
      

  3.   

    单纯要这个效果的话,alphablend比较好,能直接实现,不需要任何计算。但只能在form中使用,最好能在panel中使用,还有就是没有得到结果的图像,无法进一步加工。