覆盖模式处理透明

1、创建一个Mark图层

2、对覆盖区域进行行列扫描(使用背景色,设置透明)

 

 

  PRGB = ^TRGB;
  TRGB = record
    b, g, r, a: Byte;
  end;
  PRGBArray = ^TRGBArray;
  TRGBArray = array [0 .. 65565] of TRGB;
        
// use cMask image to remove overlaping rTab area slPtr := Integer(cBmp.ScanLine[y1]); slSize := Integer(cBmp.ScanLine[y1 + 1]) - slPtr; slPtr2 := Integer(cMask.ScanLine[y1]); slSize2 := Integer(cMask.ScanLine[y1 + 1]) - slPtr2; if i > 0 then begin for h := y1 to y2 - 1 do begin Row := PRGBArray(slPtr); Row2 := PRGBArray(slPtr2); for w := 0 to FTabOverLap - 1 do if Row2[w + (FTabWidth - FTabOverLap) + 1].g <> 0 then begin Row[w + x1].r := Byte(FColorBackground); Row[w + x1].g := Byte(FColorBackground shr 8); Row[w + x1].b := Byte(FColorBackground shr 16); Row[w + x1].A := 0; end; slPtr := slPtr + slSize; slPtr2 := slPtr2 + slSize2; end; end; // overlaping rTab area cleared

 

 

Delphi 2009 GDI+ Library


www.progdigy.com

posted @ 2012-11-19 14:14  cmacro  阅读(357)  评论(0编辑  收藏  举报