一个透明的Canvas如果让它得画
我程序里用到一个Canvas在上面自己画图,而且是透明的(下面衬一张图IMAGE)我现在想把第一遍画上去的东西清除掉重新画,否则出现两张图叠在一块,谁也看不清谁。关键是透明的。有大侠指教立刻给分

解决方案 »

  1.   

    Delphi 6 中,窗体都有一个叫AlphaBlend的属性,可以控制窗体的透明度。其实Windows里面也有相应的实现该功能的API函数(好象未公开^^),不过问题是,你的程序一定要运行在win2k/xp或更高版本的平台下才被支持。
    TGraphic中有一个Transparent的属性可以控制对某一具体颜色实现透明处理。如果你的图象处理需要很专业的效果,可以考虑用DirectDraw的SetColorKey,通过FX渲染实现之。
      

  2.   

    楼上兄弟谢谢参与!
    可能是我表达的不是太清楚,我的问题是,第二遍画之前如何把第一遍画的东西清除,就好象是一个Image对象刚放到一个Form上一样,是透明的。
    第一遍我已经可以很好的画上去了,可是第二遍画上去如不清除会出现二个图叠加,第二次画上去的东西难以辩认。
    我要解决的是如何把一个canvas清理成透明。
      

  3.   

    用一种背景色在CANVAS表面画一个矩形,不就行了吗?
      

  4.   

    你说的是类似于photoshop中图层的效果吧?
      

  5.   

    楼主  你的Canvas是谁的?如果是Image的那就擦不掉了,除非在画之前保存背景色然后再用保存的颜色去覆盖画上的东西,不过有点不现实  如果是Form的Canvas就好说了直接Refresh就行了
      

  6.   

    是一个SHAPE的,IMAGE的也可以,只要能实现
      

  7.   

    第一次画之前首先将可能画的区域保存到CanvasBack:
    CanvasBack.CopyRect(R,Image1.Canvas,R);
    第二次画之前先恢复这个区域:
    Image1.Canvas.CopyRect(R,CanvasBack,R);—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————