아래를 참조하시구요
r := Round(GetRValue(bmpColor)/2);
g := Round(GetGValue(bmpColor)/2);
b := Round(GetBValue(bmpColor)/2);
이부분은 바탕 색과 원본색을 50:50으로 한거라
비유과 원본색이 0(검은색)이 아닐때는 적절히 계산하시면 됩니다
procedure TForm1.Button1Click(Sender: TObject);
var
xx, yy : integer;
bmpColor : TColor;
r,g,b: DWORD;
begin
for xx := 0 to Image2.Width-1 do
for yy := 0 to Image2.Height-1 do begin
if Image2.Canvas.Pixels[xx,yy] = clWhite then
Image2.Canvas.Pixels[xx,yy] := clWhite
else
if Image2.Canvas.Pixels[xx,yy] = clBlack then begin
bmpColor := Image1.Canvas.Pixels[xx+(Image2.Left-Image1.Left),yy+(Image2.Top-Image1.Top) ];
r := Round(GetRValue(bmpColor)/2);
g := Round(GetGValue(bmpColor)/2);
b := Round(GetBValue(bmpColor)/2);
Image2.Canvas.Pixels[xx,yy] := RGB(R,G,B);
알파벤딩으로 처리 함될듯 한데...
^^;
반투명이 쩜 힘들듯
참고로 저는
2가지 방식을 씁니다.
1>반투명의 경우 한픽셀 건너 뛰면서 ..디스플레이를
투명은 뒤의 픽셀로 채우면 되지여..
2>2개의 픽셀값을 조합으로 처리를 합니다. (알파벤딩)
알파벤딩 함수를 쓰려면 복잡해서 저는 직접 만들어서 썻습니다.
r := Round(GetRValue(bmpColor)/2);
g := Round(GetGValue(bmpColor)/2);
b := Round(GetBValue(bmpColor)/2);
이부분은 바탕 색과 원본색을 50:50으로 한거라
비유과 원본색이 0(검은색)이 아닐때는 적절히 계산하시면 됩니다
procedure TForm1.Button1Click(Sender: TObject);
var
xx, yy : integer;
bmpColor : TColor;
r,g,b: DWORD;
begin
for xx := 0 to Image2.Width-1 do
for yy := 0 to Image2.Height-1 do begin
if Image2.Canvas.Pixels[xx,yy] = clWhite then
Image2.Canvas.Pixels[xx,yy] := clWhite
else
if Image2.Canvas.Pixels[xx,yy] = clBlack then begin
bmpColor := Image1.Canvas.Pixels[xx+(Image2.Left-Image1.Left),yy+(Image2.Top-Image1.Top) ];
r := Round(GetRValue(bmpColor)/2);
g := Round(GetGValue(bmpColor)/2);
b := Round(GetBValue(bmpColor)/2);
Image2.Canvas.Pixels[xx,yy] := RGB(R,G,B);
end
else
Image2.Canvas.Pixels[xx,yy] := clWhite;
end;
Image2.Picture.Bitmap.TransparentColor := clWhite;
Image2.Picture.Bitmap.TransparentMode := tmFixed;//tmAuto;//
Image2.Transparent := True;
hsr///////////////////////////////////////