Dwie bitmapy i scanline

0

Witam wszystkich,
Mam dwie bitmapy i chcę je dodać do siebie w taki sposób aby np. było 10% koloru z obrazka 1 i 90% z drugiego.
(Czyli np. 10% Red1 + 90% Red2 = Red3)

Wszystko jest ok jeżeli korzystam ze Pixels ale jak wiecie to trwa "troszkę" za długo.
Chciałem więc skorzystać ze scanline i tu niestety pojawił się problem.
Nie działa to tak jakbym chciał (wcale nie działa).

Proszę więc o pomoc w przeskoczeniu tego problemu. Jeżeli można to poproszę o przykład kodu bo te przykłady które mam nie działają.
Z góry dzięki

0

Zakładam taki sam rozmiar Image1 oraz Image2.

procedure TForm1.Button1Click(Sender: TObject);
var
x,y : Integer;
I1, I2, Wy : PByteArray;
begin
try
Image1.Picture.Bitmap.PixelFormat := pf24bit;
Image2.Picture.Bitmap.PixelFormat := pf24bit;
Image3.Picture.Bitmap.PixelFormat := pf24bit;
Image3.Picture.Bitmap.Height := Image1.Picture.Height;
Image3.Picture.Bitmap.Width := Image1.Picture.Width;
for y := 0 to Image1.Height -1 do
begin
I1 := Image1.Picture.Bitmap.ScanLine[y];
I2 := Image2.Picture.Bitmap.ScanLine[y];
Wy := Image3.Picture.Bitmap.ScanLine[y];
for x := 0 to Image1.Width*3 do
Wy[x] := round(I1[x]*0.1 + I2[x]*0.9); //to nie komentarz, tylko błąd skryptu do kolorowania
end;
finally
end;
end;

0

zapraszam do ściągnięcia mojej biblioteki z efektami graficznymi.
http://www.andrew.b7.pl/Grafika.pas
Jest tam procedura rysujAlfa która obsługuje AlphaBlending właśnie za pomocą metody scanLine.

Niedługo zrobię opis tej biblioteki, niech tylko te cholerne matury się skończą. Pozdrawiam, w razie problemów zapraszam na GG.

0

Serdeczne dzięki za odpowiedź.
Swoją drogą udało mi się wykonać to zadanie.

Zrobiłem pewien "błąd" oba Image były tej samej wielkości (100x100) a w niej bitmapy (30x30), i oba były ustawione na Stretch na true - i to był błąd. Przy ustalaniu pętli z Image1.Height-1 wyskakiwał błąd.
Jeżeli zaś rozmiar Bitmapy był taki sam jak Image było OK.

Pozdrawiam

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