Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB2008] ja kuvan vääntely

AimoKulaus [03.12.2008 14:42:46]

#

Onko VB2008:ssa mahdollista muuttaa valokuva halutun muotoiseksi?

Pienennös, suurennus, kääntely ja jopa vinoneliö onnistuu, mutta kun haluaisin PictureBox1:n kuvan siirrettyä Picturebox2:een niin, että kuvan kulmat ovat pisteissä (10,10), (200,30), (208,167), (43,120), eli siis kuva pitäisi vääntää hieman omituiseen muotoon...

Antti Laaksonen [04.12.2008 20:32:33]

#

Tuon koodin pitäisi venyttää kuva minkä tahansa nelikulmion sisään:

Dim kuvio(3) As Point

Function LaskeKohta(ByVal l As Integer, ByVal k As Integer, ByVal x As Integer, ByVal y As Integer) As Point
    Return New Point( _
    (kuvio(0).X * (k - y) + kuvio(3).X * y) * (l - x) / k / l + _
    (kuvio(1).X * (k - y) + kuvio(2).X * y) * x / k / l, _
    (kuvio(0).Y * (l - x) + kuvio(1).Y * x) * (k - y) / k / l + _
    (kuvio(3).Y * (l - x) + kuvio(2).Y * x) * y / k / l)
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim vanha As Bitmap, uusi As Graphics
    vanha = PictureBox1.Image
    uusi = PictureBox2.CreateGraphics
    Dim tayte As New SolidBrush(Color.Black)
    Dim leveys, korkeus As Integer
    leveys = PictureBox1.Image.Size.Width
    korkeus = PictureBox1.Image.Size.Height
    Dim x As Integer, y As Integer
    Dim osa(3) As Point
    kuvio(0) = New Point(10, 10)
    kuvio(1) = New Point(200, 30)
    kuvio(2) = New Point(208, 167)
    kuvio(3) = New Point(43, 120)
    For x = 0 To leveys - 1
        For y = 0 To korkeus - 1
            osa(0) = LaskeKohta(leveys, korkeus, x, y)
            osa(1) = LaskeKohta(leveys, korkeus, x + 1, y)
            osa(2) = LaskeKohta(leveys, korkeus, x + 1, y + 1)
            osa(3) = LaskeKohta(leveys, korkeus, x, y + 1)
            tayte.Color = vanha.GetPixel(x, y)
            uusi.FillPolygon(tayte, osa)
        Next
    Next
End Sub

AimoKulaus [04.12.2008 21:24:15]

#

Kiitoksia, hyvin toimii! (Lie tuota Laskekohta funktiota pähkäilty ilta jos toinenkin ;-)

VB:ssä itsessään ei kuitenkaan taida olla valmiita vääntelyfunktioita, samaan tapaan kuin DrawImage?

Onkos joku taistellut kuvien liittämisen kanssa. Siis esimerkiksi kun kootaan panoraamakuva useasta erillisestä kuvasta. Kuvien liittämisessä täytyy tehdä jossain kohtaa häivytys, jossa tasaisesti siirrytään kuvasta toiseen. Kuvat voivat tietenkin olla hieman vinossa, kun se kamera ei aina ole vaaterissa. Ja vielä niin, että kuvia voi olla sekä sivusuunnassa että korkeussuunnassa... Liekö joku tehnyt tähän algoritmit?

Blaze [04.12.2008 21:53:35]

#

http://hugin.sourceforge.net/

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta