Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    106

    Programma per la gestione di immagini

    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???
    ah naturalmente in VB.NET

    Ho provato con:

    Main window:
    codice:
    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:
    codice:
    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:

  2. #2

    Moderazione

    Il linguaggio di riferimento va indicato sempre anche nel titolo, come "tag"; ora lo aggiungo io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    106
    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?

  4. #4
    Il concetto è simile, ti salvi l'immagine tagliata in una Bitmap, quindi usi DrawImage per incollare la bitmap sull'immagine target alla posizione specificata.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.