Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Programma per la gestione di immagini
Forum - C# / VB.NET - Programma per la gestione di immagini

Avatar
Reloader90 (Normal User)
Rookie


Messaggi: 40
Iscritto: 15/07/2011

Segnala al moderatore
Postato alle 13:28
Mercoledì, 01/05/2013
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 il 01/05/2013 alle 13:28
PM Quote
Avatar
Reloader90 (Normal User)
Rookie


Messaggi: 40
Iscritto: 15/07/2011

Segnala al moderatore
Postato alle 18:56
Giovedì, 02/05/2013
Ho provato con:

Main window:
Codice sorgente - presumibilmente VB.NET

  1. Public sourceimg As Image
  2.  
  3.     Private Sub ApriToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ApriToolStripMenuItem.Click
  4.         ofd.ShowDialog()
  5.         sourceimg = com.CaricaImmagine(ofd.FileName, False)
  6.         pic.Image = sourceimg
  7.     End Sub
  8.  
  9.     Private Sub DividiInTilesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles DividiInTilesToolStripMenuItem.Click
  10.         For ty As UInteger = 0 To CInt(sourceimg.Height / 32)
  11.             For tx As UInteger = 0 To CInt(sourceimg.Width / 32)
  12.                 Dim ni As Image = CutImage(sourceimg, New RectangleF(tx * 32, ty * 32, 32, 32))
  13.                 iltiles.Images.Add(ni)
  14.                 lvtiles.Items.Add("asd", iltiles.Images.Count - 1)
  15.             Next
  16.         Next
  17.     End Sub



com:
Codice sorgente - presumibilmente VB.NET

  1. Imports System.Drawing.Drawing2D
  2. Imports System.IO
  3.  
  4. Module com
  5.     Public Function ResizeImage(ByVal currentImage As Image, ByVal newSize As Size, _
  6.     Optional ByVal MaintainAspect As Boolean = True) As Image
  7.         If MaintainAspect = True Then
  8.             newSize = CalculateImageSize(currentImage.Size, newSize)
  9.         End If
  10.  
  11.         Dim TargetBitmap As New Bitmap(currentImage, newSize)
  12.         Dim TargetGraphic As Graphics = Graphics.FromImage(TargetBitmap)
  13.  
  14.         TargetGraphic.InterpolationMode = InterpolationMode.HighQualityBicubic
  15.         TargetGraphic.SmoothingMode = SmoothingMode.HighQuality
  16.         TargetGraphic.DrawImage(currentImage, New Rectangle(0, 0, newSize.Width, newSize.Height) _
  17.             , 0, 0, currentImage.Width, currentImage.Height, GraphicsUnit.Pixel)
  18.  
  19.         TargetGraphic.Dispose()
  20.         TargetGraphic = Nothing
  21.  
  22.         Return TargetBitmap
  23.     End Function
  24.  
  25.     Public Function CalculateImageSize(ByVal ImageSize As Size, ByVal newsize As Size) As Size
  26.         Dim mySize As Size
  27.         Dim rNew As Double
  28.         Dim rCur As Double
  29.  
  30.         rNew = newsize.Width / newsize.Height
  31.         rCur = ImageSize.Width / ImageSize.Height
  32.  
  33.         If rCur > rNew Then
  34.             mySize.Width = newsize.Width
  35.             mySize.Height = CInt(mySize.Width / rCur)
  36.         End If
  37.  
  38.         If rCur < rNew Then
  39.             mySize.Height = newsize.Height
  40.             mySize.Width = CInt(mySize.Height * rCur)
  41.         End If
  42.  
  43.         If rCur = rNew Then
  44.             mySize.Width = newsize.Width
  45.             mySize.Height = newsize.Height
  46.         End If
  47.  
  48.         Return mySize
  49.     End Function
  50.  
  51.     Public Function CaricaImmagine(ByVal pFile As String, ByVal pMetodo As Boolean) As System.Drawing.Image
  52.         Dim retImage As Image = Nothing
  53.         If pMetodo Then
  54.             Dim img As Image = New Bitmap(pFile)
  55.             retImage = New Bitmap(img)
  56.             img.Dispose()
  57.         Else
  58.             Dim imgFile As FileStream = New FileStream(pFile, FileMode.Open)
  59.             Dim imgReader As BinaryReader = New BinaryReader(imgFile)
  60.             Dim imgStream As MemoryStream = New MemoryStream(imgReader.ReadBytes(CInt(imgFile.Length)))
  61.             imgReader.Close()
  62.             retImage = Image.FromStream(imgStream)
  63.         End If
  64.         Return retImage
  65.     End Function
  66.  
  67.     Public Function CutImage(ByVal Original As Image, ByVal CutArea As RectangleF) As Image
  68.         Dim Result As New Bitmap(CInt(CutArea.Width), CInt(CutArea.Height))
  69.         Dim G As Graphics = Graphics.FromImage(Result)
  70.         G.DrawImage(Original, Original.GetBounds(GraphicsUnit.Pixel), CutArea, GraphicsUnit.Pixel)
  71.         G.Dispose()
  72.         Return Result
  73.     End Function
  74. 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:

PM Quote
Avatar
Reloader90 (Normal User)
Rookie


Messaggi: 40
Iscritto: 15/07/2011

Segnala al moderatore
Postato alle 16:10
Venerdì, 03/05/2013
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?

PM Quote