
A jelenleg megvalósított algoritmus feltételezi, hogy a két feldolgozandó kép mérete megegyezik!
A megvalósítás lényege arra alapszik, hogy végigmegyünk a két kép minden pixelén és az azonos pozíciókban lévő pixelek aktuális értékét figyelembe véve, valamint egy százalékos értéket is figyelembe véve - mely az átlátszóságot adja meg két kép között - kiszámítjuk az új kép adott pixelére beállítandó szín értékét.
Mivel RGB színekkel dolgozunk, így ezt a számítást mind a három színösszetevőre külön-külön kell elvégeznünk.
Szükségünk lesz tehát három Bitmap-re: az első kettő tárolja a két képet, míg a harmadikra állítjuk elő a két kép alapján az újat.
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Dim bmp1 As Bitmap = CType(pictureBox1.Image, Bitmap)
Dim bmp2 As Bitmap = CType(pictureBox2.Image, Bitmap)
Dim bmp3 As New Bitmap(80, 80, e.Graphics)
Szükségünk lesz még egy 0 és 1 közötti számra, mely azt határozza meg, hogy melyik kép hány százalékig látható.
Dim d As [Double] = (100 - CDbl(trackBar1.Value)) / 100
Ezt követően egy kettős ciklussal végigmegyünk a képek összes pixelén.
Dim y As Integer
For y = 0 To bmp1.Height - 1
Dim x As Integer
For x = 0 To bmp1.Width - 1
A c1 és c2 Color típusú változókba mentjük az adott pixel színét.
c1 = bmp1.GetPixel(x, y)
c2 = bmp2.GetPixel(x, y)
Majd minden színösszetevőre kiszámítjuk a szükséges új színt. A piros esetében vesszük az c1 és c2 piros összetevőjét. Az egyik esetben d-vel szorzunk, a másiknál pedig 1-d-vel. Erre azért van szükség, mert így minél jobban látható az egyik kép, annál halványabb lesz a másik. Mivel a d értéke 0 és 1 között mozog, így az 1-d pont az ellenkező százalékos értéket adja.
r = Convert.ToInt32((CDbl(c1.R) * d + CDbl(c2.R) * (1 - d)))
g = Convert.ToInt32((CDbl(c1.G) * d + CDbl(c2.G) * (1 - d)))
b = Convert.ToInt32((CDbl(c1.B) * d + CDbl(c2.B) * (1 - d)))
c = Color.FromArgb(r, g, b)
bmp3.SetPixel(x, y, c)
Next x
Next y
A ciklusok végén már nincs más teendőnk, mint az új képet kirajzolni a Form-ra.
e.Graphics.DrawImage(bmp3, 100, 150, 80, 80)
End Sub 'Form1_Paint