Oppure

Loading
01/05/13 11:28
Reloader90
Salve vorrei creare un programma che gestisca immagini, tileset
ovvero l'immagine è suddiva in una matrice e ogni cella è di dimensione 32*32
vorrei che questo programma sia in grado di:
- ridimensionare l'immagine
- caricare immagini e suddividerla (per metterla nella matrice le cui celle sn 32*32)
- aggiungere tile, ovvero io ho una cella/immagine 32*32 e la posso mettere nella matrice
- salvare (ovviamente)

come potrei fare??? :hail:
ah naturalmente in VB.NET
Ultima modifica effettuata da Reloader90 01/05/13 11:28
aaa
02/05/13 16:56
Reloader90
Ho provato con:

Main window:
Public sourceimg As Image

    Private Sub ApriToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ApriToolStripMenuItem.Click
        ofd.ShowDialog()
        sourceimg = com.CaricaImmagine(ofd.FileName, False)
        pic.Image = sourceimg
    End Sub

    Private Sub DividiInTilesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DividiInTilesToolStripMenuItem.Click
        For ty As UInteger = 0 To CInt(sourceimg.Height / 32)
            For tx As UInteger = 0 To CInt(sourceimg.Width / 32)
                Dim ni As Image = CutImage(sourceimg, New RectangleF(tx * 32, ty * 32, 32, 32))
                iltiles.Images.Add(ni)
                lvtiles.Items.Add("asd", iltiles.Images.Count - 1)
            Next
        Next
    End Sub


com:
Imports System.Drawing.Drawing2D
Imports System.IO

Module com
    Public Function ResizeImage(ByVal currentImage As Image, ByVal newSize As Size, _
    Optional ByVal MaintainAspect As Boolean = True) As Image
        If MaintainAspect = True Then
            newSize = CalculateImageSize(currentImage.Size, newSize)
        End If

        Dim TargetBitmap As New Bitmap(currentImage, newSize)
        Dim TargetGraphic As Graphics = Graphics.FromImage(TargetBitmap)

        TargetGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic
        TargetGraphic.SmoothingMode = SmoothingMode.HighQuality
        TargetGraphic.DrawImage(currentImage, New Rectangle(0, 0, newSize.Width, newSize.Height) _
            , 0, 0, currentImage.Width, currentImage.Height, GraphicsUnit.Pixel)

        TargetGraphic.Dispose()
        TargetGraphic = Nothing

        Return TargetBitmap
    End Function

    Public Function CalculateImageSize(ByVal ImageSize As Size, ByVal newsize As Size) As Size
        Dim mySize As Size
        Dim rNew As Double
        Dim rCur As Double

        rNew = newsize.Width / newsize.Height
        rCur = ImageSize.Width / ImageSize.Height

        If rCur > rNew Then
            mySize.Width = newsize.Width
            mySize.Height = CInt(mySize.Width / rCur)
        End If

        If rCur < rNew Then
            mySize.Height = newsize.Height
            mySize.Width = CInt(mySize.Height * rCur)
        End If

        If rCur = rNew Then
            mySize.Width = newsize.Width
            mySize.Height = newsize.Height
        End If

        Return mySize
    End Function

    Public Function CaricaImmagine(ByVal pFile As String, ByVal pMetodo As Boolean) As System.Drawing.Image
        Dim retImage As Image = Nothing
        If pMetodo Then
            Dim img As Image = New Bitmap(pFile)
            retImage = New Bitmap(img)
            img.Dispose()
        Else
            Dim imgFile As FileStream = New FileStream(pFile, FileMode.Open)
            Dim imgReader As BinaryReader = New BinaryReader(imgFile)
            Dim imgStream As MemoryStream = New MemoryStream(imgReader.ReadBytes(CInt(imgFile.Length)))
            imgReader.Close()
            retImage = Image.FromStream(imgStream)
        End If
        Return retImage
    End Function

    Public Function CutImage(ByVal Original As Image, ByVal CutArea As RectangleF) As Image
        Dim Result As New Bitmap(CInt(CutArea.Width), CInt(CutArea.Height))
        Dim G As Graphics = Graphics.FromImage(Result)
        G.DrawImage(Original, Original.GetBounds(GraphicsUnit.Pixel), CutArea, GraphicsUnit.Pixel)
        G.Dispose()
        Return Result
    End Function
End Module


Ma non funziona... non taglia i tileset... aiuto!!!
iltiles è l'image list 32*32
lvtiles è la listview dove devono essere visualizzati tutti i tiles 32*32
:hail:
aaa
03/05/13 14:10
Reloader90
ci sono risuscito... era la funzione di cut errata...
ora vorrei incollare l'immagine tagliata su un altra immagine in una certa posizione....
come posso fare?
aaa