02/05/13 16:56
Reloader90
Ho provato con:
Main window:
com:
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
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
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?
ora vorrei incollare l'immagine tagliata su un altra immagine in una certa posizione....
come posso fare?
aaa