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...
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 SubKiitoksia, 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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.