منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
كيفية ادارة صورة 360 درجة - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : الأقسام التعليمية - المنتدى القديم (http://vb4arb.com/vb/forumdisplay.php?fid=90)
+--- قسم : مكتبة أكواد المنتدى (http://vb4arb.com/vb/forumdisplay.php?fid=111)
+---- قسم : مكتبة أكواد .net (http://vb4arb.com/vb/forumdisplay.php?fid=117)
+---- الموضوع : كيفية ادارة صورة 360 درجة (/showthread.php?tid=6305)



كيفية ادارة صورة 360 درجة - RaggiTech - 17-10-12

كاتب الموضوع : Friendassist

لادارة صورة بأي زاوية تحددها استخدم هذه الدالة :
كود :
[color=#000000][COLOR=#0000bb]  [/color][color=#007700]Private [/color][color=#0000bb]Sub rotate[/color][COLOR=#007700]()
        Try
            [/COLOR][COLOR=#dd0000]' Copy the output bitmap from the source image.
            Dim bm_in As New Bitmap(My.Resources.car)

            ' [/COLOR][color=#0000bb]Make an [/color][color=#007700]array [/color][COLOR=#0000bb]of points defining the
            [/COLOR][color=#dd0000]' image'[/color][color=#0000bb]s corners[/color][COLOR=#007700].
            [/COLOR][color=#0000bb]Dim wid [/color][color=#007700]As [/color][color=#0000bb]Single [/color][color=#007700]= [/color][color=#0000bb]bm_in[/color][color=#007700].[/color][COLOR=#0000bb]Width
            Dim hgt [/COLOR][color=#007700]As [/color][color=#0000bb]Single [/color][color=#007700]= [/color][color=#0000bb]bm_in[/color][color=#007700].[/color][COLOR=#0000bb]Height
            Dim corners [/COLOR][color=#007700]As [/color][color=#0000bb]Point[/color][color=#007700]() = { [/color][COLOR=#0000bb]_
                [/COLOR][color=#007700]New [/color][color=#0000bb]Point[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700]), [/color][COLOR=#0000bb]_
                [/COLOR][color=#007700]New [/color][color=#0000bb]Point[/color][color=#007700]([/color][color=#0000bb]wid[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700]), [/color][COLOR=#0000bb]_
                [/COLOR][color=#007700]New [/color][color=#0000bb]Point[/color][color=#007700]([/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]hgt[/color][color=#007700]), [/color][COLOR=#0000bb]_
                [/COLOR][color=#007700]New [/color][color=#0000bb]Point[/color][color=#007700]([/color][color=#0000bb]wid[/color][color=#007700], [/color][color=#0000bb]hgt[/color][COLOR=#007700])}

            [/COLOR][COLOR=#dd0000]' Translate to center the bounding box at the origin.
            Dim cx As Single = wid / 2
            Dim cy As Single = hgt / 2
            Dim i As Long
            For i = 0 To 3
                corners(i).X -= cx
                corners(i).Y -= cy
            Next i

            ' [/COLOR][color=#0000bb]Rotate[/color][COLOR=#007700].
            [/COLOR][color=#0000bb]Dim theta [/color][color=#007700]As [/color][color=#0000bb]Single [/color][color=#007700]= [/color][color=#0000bb]Single[/color][color=#007700].[/color][color=#0000bb]Parse[/color][color=#007700]([/color][color=#0000bb]txtAngle[/color][color=#007700].[/color][color=#0000bb]Text[/color][color=#007700]) * [/color][color=#0000bb]PI [/color][color=#007700]/ [/color][COLOR=#0000bb]180.0
            Dim sin_theta [/COLOR][color=#007700]As [/color][color=#0000bb]Single [/color][color=#007700]= [/color][color=#0000bb]Sin[/color][color=#007700]([/color][color=#0000bb]theta[/color][COLOR=#007700])
            [/COLOR][color=#0000bb]Dim cos_theta [/color][color=#007700]As [/color][color=#0000bb]Single [/color][color=#007700]= [/color][color=#0000bb]Cos[/color][color=#007700]([/color][color=#0000bb]theta[/color][COLOR=#007700])
            [/COLOR][color=#0000bb]Dim X [/color][color=#007700]As [/color][COLOR=#0000bb]Single
            Dim Y [/COLOR][color=#007700]As [/color][COLOR=#0000bb]Single
            [/COLOR][color=#007700]For [/color][color=#0000bb]i [/color][color=#007700]= [/color][COLOR=#0000bb]0 To 3
                X [/COLOR][color=#007700]= [/color][color=#0000bb]corners[/color][color=#007700]([/color][color=#0000bb]i[/color][color=#007700]).[/color][COLOR=#0000bb]X
                Y [/COLOR][color=#007700]= [/color][color=#0000bb]corners[/color][color=#007700]([/color][color=#0000bb]i[/color][color=#007700]).[/color][COLOR=#0000bb]Y
                corners[/COLOR][color=#007700]([/color][color=#0000bb]i[/color][color=#007700]).[/color][color=#0000bb]X [/color][color=#007700]= [/color][color=#0000bb]X [/color][color=#007700]* [/color][color=#0000bb]cos_theta [/color][color=#007700]+ [/color][color=#0000bb]Y [/color][color=#007700]* [/color][COLOR=#0000bb]sin_theta
                corners[/COLOR][color=#007700]([/color][color=#0000bb]i[/color][color=#007700]).[/color][color=#0000bb]Y [/color][color=#007700]= -[/color][color=#0000bb]X [/color][color=#007700]* [/color][color=#0000bb]sin_theta [/color][color=#007700]+ [/color][color=#0000bb]Y [/color][color=#007700]* [/color][COLOR=#0000bb]cos_theta
            Next i

            [/COLOR][COLOR=#dd0000]' Translate so X >= 0 and Y >=0 for all corners.
            Dim xmin As Single = corners(0).X
            Dim ymin As Single = corners(0).Y
            For i = 1 To 3
                If xmin > corners(i).X Then xmin = corners(i).X
                If ymin > corners(i).Y Then ymin = corners(i).Y
            Next i
            For i = 0 To 3
                corners(i).X -= xmin
                corners(i).Y -= ymin
            Next i

            ' [/COLOR][color=#0000bb]Create an output Bitmap [/color][color=#007700]and [/color][color=#0000bb]Graphics object[/color][COLOR=#007700].
            [/COLOR][color=#0000bb]Dim bm_out [/color][color=#007700]As New [/color][color=#0000bb]Bitmap[/color][color=#007700]([/color][color=#0000bb]CInt[/color][color=#007700](-[/color][color=#0000bb]2 [/color][color=#007700]* [/color][color=#0000bb]xmin[/color][color=#007700]), [/color][color=#0000bb]CInt[/color][color=#007700](-[/color][color=#0000bb]2 [/color][color=#007700]* [/color][color=#0000bb]ymin[/color][COLOR=#007700]))
            [/COLOR][color=#0000bb]Dim gr_out [/color][color=#007700]As [/color][color=#0000bb]Graphics [/color][color=#007700]= [/color][color=#0000bb]Graphics[/color][color=#007700].[/color][color=#0000bb]FromImage[/color][color=#007700]([/color][color=#0000bb]bm_out[/color][COLOR=#007700])

            [/COLOR][COLOR=#dd0000]' Drop the last corner lest we confuse DrawImage,  
            ' [/COLOR][color=#0000bb]which expects an [/color][color=#007700]array [/color][color=#0000bb]of three corners[/color][COLOR=#007700].
            [/COLOR][color=#0000bb]ReDim Preserve corners[/color][color=#007700]([/color][color=#0000bb]2[/color][COLOR=#007700])

            [/COLOR][COLOR=#dd0000]' Draw the result onto the output Bitmap.
            gr_out.DrawImage(bm_in, corners)

            ' [/COLOR][color=#0000bb]Display the result[/color][COLOR=#007700].
            [/COLOR][color=#0000bb]picDest[/color][color=#007700].[/color][color=#0000bb]Image [/color][color=#007700]= [/color][COLOR=#0000bb]bm_out
        [/COLOR][color=#007700]Catch [/color][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]Exception
            [/COLOR][COLOR=#007700]Return
        [/COLOR][color=#0000bb]End [/color][COLOR=#007700]Try
    [/COLOR][COLOR=#0000bb]End Sub  
[/COLOR][/COLOR]


و استعن بهذه المكتبات :
كود :
[color=#000000][COLOR=#0000bb]Imports System[/color][color=#007700].[/color][color=#0000bb]Drawing[/color][color=#007700].[/color][COLOR=#0000bb]Imaging
Imports System[/COLOR][color=#007700].[/color][color=#0000bb]Drawing[/color][color=#007700].[/color][COLOR=#0000bb]Drawing2D
Imports System[/COLOR][color=#007700].[/color][COLOR=#0000bb]Math  
[/COLOR][/COLOR]


و للاستعانة بالدالة قم بوضع اداة ليبل باسم txtAngle و اجعل قيمته الاولية بصفر ثم استخدم هذا الكود في اداة تايمر :
كود :
[color=#000000][COLOR=#0000bb] [/color][COLOR=#007700]Try
            [/COLOR][color=#0000bb]txtAngle[/color][color=#007700].[/color][color=#0000bb]Text [/color][color=#007700]+= [/color][COLOR=#0000bb]5
            rotate[/COLOR][COLOR=#007700]()
        Catch [/COLOR][color=#0000bb]ex [/color][color=#007700]As [/color][COLOR=#0000bb]Exception
        End [/COLOR][COLOR=#007700]Try  
[/COLOR][color=#0000bb][/color][/COLOR]


كود مماثل ولكنه غير قابل للاستمرار أي يعمل علي مره واحدة :
كود :
[color=#000000][COLOR=#0000bb] Dim img [/color][color=#007700]As [/color][color=#0000bb]Bitmap [/color][color=#007700]= New [/color][color=#0000bb]Bitmap[/color][color=#007700]([/color][color=#0000bb]My[/color][color=#007700].[/color][color=#0000bb]Resources[/color][color=#007700].[/color][color=#0000bb]car[/color][COLOR=#007700])
    Public Function [/COLOR][color=#0000bb]RotateImg[/color][color=#007700]([/color][color=#0000bb]ByVal bmpimage [/color][color=#007700]As [/color][color=#0000bb]Bitmap[/color][color=#007700], [/color][color=#0000bb]ByVal angle [/color][color=#007700]As [/color][color=#0000bb]Single[/color][color=#007700]) As [/color][COLOR=#0000bb]Bitmap
        Dim w [/COLOR][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][color=#0000bb]bmpimage[/color][color=#007700].[/color][COLOR=#0000bb]Width
        Dim h [/COLOR][color=#007700]As [/color][color=#0000bb]Integer [/color][color=#007700]= [/color][color=#0000bb]bmpimage[/color][color=#007700].[/color][COLOR=#0000bb]Height
        Dim pf [/COLOR][color=#007700]As [/color][color=#0000bb]PixelFormat [/color][color=#007700]= [/color][COLOR=#0000bb]Nothing
        pf [/COLOR][color=#007700]= [/color][color=#0000bb]bmpimage[/color][color=#007700].[/color][COLOR=#0000bb]PixelFormat
        Dim tempImg [/COLOR][color=#007700]As New [/color][color=#0000bb]Bitmap[/color][color=#007700]([/color][color=#0000bb]w[/color][color=#007700], [/color][color=#0000bb]h[/color][color=#007700], [/color][color=#0000bb]pf[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]Dim g [/color][color=#007700]As [/color][color=#0000bb]Graphics [/color][color=#007700]= [/color][color=#0000bb]Graphics[/color][color=#007700].[/color][color=#0000bb]FromImage[/color][color=#007700]([/color][color=#0000bb]tempImg[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g[/color][color=#007700].[/color][color=#0000bb]DrawImageUnscaled[/color][color=#007700]([/color][color=#0000bb]bmpimage[/color][color=#007700], [/color][color=#0000bb]1[/color][color=#007700], [/color][color=#0000bb]1[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g[/color][color=#007700].[/color][color=#0000bb]Dispose[/color][COLOR=#007700]()
        [/COLOR][color=#0000bb]Dim path [/color][color=#007700]As New [/color][color=#0000bb]GraphicsPath[/color][COLOR=#007700]()
        [/COLOR][color=#0000bb]path[/color][color=#007700].[/color][color=#0000bb]AddRectangle[/color][color=#007700](New [/color][color=#0000bb]RectangleF[/color][color=#007700]([/color][color=#0000bb]0.0F[/color][color=#007700], [/color][color=#0000bb]0.0F[/color][color=#007700], [/color][color=#0000bb]w[/color][color=#007700], [/color][color=#0000bb]h[/color][COLOR=#007700]))
        [/COLOR][color=#0000bb]Dim mtrx [/color][color=#007700]As New [/color][color=#0000bb]Matrix[/color][COLOR=#007700]()
        [/COLOR][color=#0000bb]Using System[/color][color=#007700].[/color][color=#0000bb]Drawing[/color][color=#007700].[/color][color=#0000bb]Drawing2D[/color][color=#007700].[/color][color=#0000bb]Matrix [/color][COLOR=#007700]class

        [/COLOR][color=#0000bb]mtrx[/color][color=#007700].[/color][color=#0000bb]Rotate[/color][color=#007700]([/color][color=#0000bb]angle[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]Dim rct [/color][color=#007700]As [/color][color=#0000bb]RectangleF [/color][color=#007700]= [/color][color=#0000bb]path[/color][color=#007700].[/color][color=#0000bb]GetBounds[/color][color=#007700]([/color][color=#0000bb]mtrx[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]Dim newImg [/color][color=#007700]As New [/color][color=#0000bb]Bitmap[/color][color=#007700]([/color][color=#0000bb]Convert[/color][color=#007700].[/color][color=#0000bb]ToInt32[/color][color=#007700]([/color][color=#0000bb]rct[/color][color=#007700].[/color][color=#0000bb]Width[/color][color=#007700]), [/color][color=#0000bb]Convert[/color][color=#007700].[/color][color=#0000bb]ToInt32[/color][color=#007700]([/color][color=#0000bb]rct[/color][color=#007700].[/color][color=#0000bb]Height[/color][color=#007700]), [/color][color=#0000bb]pf[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g [/color][color=#007700]= [/color][color=#0000bb]Graphics[/color][color=#007700].[/color][color=#0000bb]FromImage[/color][color=#007700]([/color][color=#0000bb]newImg[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g[/color][color=#007700].[/color][color=#0000bb]TranslateTransform[/color][color=#007700](-[/color][color=#0000bb]rct[/color][color=#007700].[/color][color=#0000bb]X[/color][color=#007700], -[/color][color=#0000bb]rct[/color][color=#007700].[/color][color=#0000bb]Y[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g[/color][color=#007700].[/color][color=#0000bb]RotateTransform[/color][color=#007700]([/color][color=#0000bb]angle[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g[/color][color=#007700].[/color][color=#0000bb]InterpolationMode [/color][color=#007700]= [/color][color=#0000bb]InterpolationMode[/color][color=#007700].[/color][COLOR=#0000bb]HighQualityBilinear
        g[/COLOR][color=#007700].[/color][color=#0000bb]DrawImageUnscaled[/color][color=#007700]([/color][color=#0000bb]tempImg[/color][color=#007700], [/color][color=#0000bb]0[/color][color=#007700], [/color][color=#0000bb]0[/color][COLOR=#007700])
        [/COLOR][color=#0000bb]g[/color][color=#007700].[/color][color=#0000bb]Dispose[/color][COLOR=#007700]()
        [/COLOR][color=#0000bb]tempImg[/color][color=#007700].[/color][color=#0000bb]Dispose[/color][COLOR=#007700]()
        Return [/COLOR][COLOR=#0000bb]newImg
    End [/COLOR][COLOR=#007700]Function  
[/COLOR][color=#0000bb][/color][/COLOR]


للاستخدام :
كود :
[color=#000000][COLOR=#0000bb] picDest[/color][color=#007700].[/color][color=#0000bb]Image [/color][color=#007700]= [/color][color=#0000bb]RotateImg[/color][color=#007700]([/color][color=#0000bb]img[/color][color=#007700], [/color][color=#0000bb]Convert[/color][color=#007700].[/color][color=#0000bb]ToUInt64[/color][color=#007700]([/color][color=#0000bb]90[/color][COLOR=#007700]))  
[/COLOR][color=#0000bb][/color][/COLOR]