Łączenie bitmap

0

Jak połączyć dwie bitmapy w taki sposób, że jedna jest tłem, a druga zawiera jednokolorowy kształt i jednokolorowe tło, a ja chcę tę drugą położyć na pierwszej tak, żeby było widać jako tło tej drugiej tło pierwszej.

Kurcze! ale skomplikowane! [???]

Proszę o pomoc!

0

musisz sie pobawic kolorkami i matematyka :)

w komponentach directX jest opcja alphablend, mozesz uzyc tego

pozdrowionka

0

A nie można by jakoś tego po prostu dodać albo coś w tym stylu? To są niewielkie pliki 32x32 piksele. Potrzebuję z dwóch TBitmap zrobić jedną.

0
function tralalala(bmp, mask : TBitmap; transparent : TColor) : TBitmap;
var
  x, y : word;

begin
   for x := 0 to bmp.width do 
     for y := 0 to bmp.height do
       if mask.pixels[x,y] = transparent then result.pixels[x,y] := bmp.pixels[x,y] else result.pixels[x,y] := mask.pixels[x,y];
end;

Uwaga : metoda BARDZO wolna.. przerób sobie to wykorzystując scanline;

// zapomiałem o "canvas" przed pixels.. ale to sobie dopiszesz sam.. pozdr.

0

Tak jest lepiej: ;-)

function TForm1.tralalala(bmp, mask: TBitmap; transparent: TColor): TBitmap;
var
  x, y : word;
begin
  Result.Assign(bmp);
  for x := 0 to bmp.width do
    for y := 0 to bmp.height do
      if not (mask.Canvas.pixels[x,y] = transparent) then
        result.Canvas.pixels[x,y] := mask.Canvas.pixels[x,y];
end;
0

Efekt BlueBox..
gdzies tu w serwisie jest komponent BlueBox...

0

BitBlt lub MaskBlt ma chyba taką możliwość. Musiałbym poszukać.

0

Ale to chyba nie jest aż tak trudne... :|

function PolaczBitmapy(BitBkg, Bit2: TBitmap; Kolor: TColor): TBitmap;
begin
Result:=TBitmap.Create;
Bit2.TransparentColor:=Kolor;
Bit2.Transparent:=True;
Result.Assign(BitBkg);
Result.Canvas.Draw(0,0,Bit2);
end;

BitBkg - tło
Bit2 - pierwszy plan
Kolor - kolor przezroczysty 1-szego planu

funkcję wywołujemy w ten sposób że

var
b: TBitmap;

begin
...
// tutaj NIE piszemy b:=TBitmap.Create tylko od razu
b:=PolaczBitmapy(bit1,bit2);

1 użytkowników online, w tym zalogowanych: 0, gości: 1