HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Két tetszőleges kép közötti áttetszőség


Példaprogram letöltése

41606 bájt

Ha adott két tetszőleges képünk és azt szeretnénk elérni, hogy e két képet egymásra helyezve azok valamilyen általunk megadott mértékben áttetszők legyenek, és így az egyik kép alatt látható legyen a másik, akkor ennek módját megismerhetjük a mellékelt példából.

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

Cikksorozat

#IDKategóriaCikk címeSorozat
4397Windows.NET Framework konfigurálása az operációs rendszerben1. rész
4446Windows.NET Framework konfigurációs snap-in2. rész


Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |