Schön meine alte
Unit mal im Netz wieder zufinden
!
Hier mal zwei einfache Lösung:
Delphi-Quellcode:
.
.
.
procedure _SemiOpaque(src:Tbitmap; Color:TColor);
var x,y:Integer;
p:PInteger;
begin
src.PixelFormat:=pf32bit;
p:= src.Scanline[Pred(src.Height)];
for y:=1 to src.Height do
for x:=1 to src.Width do
begin
if ((x+0 mod 2) = 0) and ((y mod 2) = 0) then p^:= Color;
if ((x+1 mod 2) = 0) and ((y mod 2) <> 0) then p^:= Color;
Inc(p);
end;
end;
procedure _GridOpaque(src:Tbitmap; Color:TColor);
var x,y:Integer;
p:PInteger;
begin
src.PixelFormat:=pf32bit;
p:= src.Scanline[Pred(src.Height)];
for y:=1 to src.Height do
for x:=1 to src.Width do
begin
if ((x+0 mod 2) = 0) and ((y mod 2) = 0) then p^:= p^ else
if ((x+1 mod 2) = 0) and ((y mod 2) <> 0) then p^:= p^ else
p^:= Color;
Inc(p);
end;
end;
procedure TGW_ImagePlus.doSemiOpaque(Color: TColor);
var tmpBmp: TBitmap;
oldPf: TPixelFormat;
begin
tmpBmp:= TBitmap.Create;
tmpBmp.Assign(Picture.Bitmap);
oldPf:= tmpBmp.PixelFormat;
_SemiOpaque(tmpBmp, Color);
tmpBmp.PixelFormat:= oldPf;
Picture.Bitmap.Assign(tmpBmp);
Picture.Bitmap.TransparentColor:= Color;
Picture.Bitmap.TransparentMode:= tmFixed;
Transparent:= true;
tmpBmp.Free;
Invalidate;
end;
procedure TGW_ImagePlus.doGridOpaque(Color: TColor);
var tmpBmp: TBitmap;
oldPf: TPixelFormat;
begin
tmpBmp:= TBitmap.Create;
tmpBmp.Assign(Picture.Bitmap);
oldPf:= tmpBmp.PixelFormat;
_GridOpaque(tmpBmp, Color);
tmpBmp.PixelFormat:= oldPf;
Picture.Bitmap.Assign(tmpBmp);
Picture.Bitmap.TransparentColor:= Color;
Picture.Bitmap.TransparentMode:= tmFixed;
Transparent:= true;
tmpBmp.Free;
Invalidate;
end;
.
.
.
Diese zwei Proceduren sind aus meiner neuen
Unit, und setzen dann gleich das TImage halb Transparent,
aber das Grundprinzip ist gut zu erkennen.
MfG Gothicware.