vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Probleme mit Bildern in GDI+ mit VB2005EE 
Autor: Bloody Rain
Datum: 25.02.11 05:41

Ok, ich versuche grade ein Programm zu schreiben zum vereinfachten zusammenstellen eines Texturpacks für Minecraft. Da das Spiel lowres Texturen verwendet konnte ich leider einen Fehler in den draw Funktionen des Graphics Objekts finden.

	Sub CboxTextureSelectedIndexChanged(ByVal sender As Object, ByVal e As _
  EventArgs) Handles cboxTexture.SelectedIndexChanged
                'picTexture ist 512x512 Pixel groß und auf No Border gestellt 
                ' damit die Zeichenfläche diese größe hat
		picTexture.Image = LoadImage(cboxTexture.SelectedItem.ToString(), _
  cboxPack.SelectedIndex)
		Dim tex As Image = picTexture.Image
		If tex.Width < picTexture.ClientSize.Width And tex.Height < _
  picTexture.ClientSize.Height Then
                        'x und y werden an dieser Stelle auf 256 gesetzt da das 
                        ' die original Größe beider Texturen ist
			Dim x As Integer = tex.Width, y As Integer = tex.Height, ratio As Double = x _
  / y
			'dieser skalierungs Code ist für die nicht 1:1 Texturen mit denen ich zwar 
' auch Probleme habe, aber ebenfalls die Vermutung das eh alles auf diesem 
' Problem beruht
                        x = picTexture.ClientSize.Width
			y = CInt(Math.Floor(x / ratio))
			If y > picTexture.ClientSize.Height Then
				y = picTexture.ClientSize.Height
				x = CInt(Math.Floor(y * ratio))
			End If
                        'an dieser Stelle wird ein Bitmap mit 512x512 Pixel 
                        ' erstellt
			Dim pic As New Bitmap(x, y)
			Using g As Graphics = Graphics.FromImage(pic)
                                'Antialiasing ist das letzte was man beim 
                                ' vergrößern von Minecraft Texturen braucht
				g.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
				g.SmoothingMode = Drawing2D.SmoothingMode.None
				g.DrawImage(tex, New Rectangle(0, 0, x, y), New Rectangle(0, 0, tex.Width, _
  tex.Height), GraphicsUnit.Pixel)
				g.DrawImageUnscaled(tex, 0, 0)
			End Using
			'g.ScaleTransform(picTexture.Width, picTexture.Height)
			picTexture.Image = pic
			Try
				pic.Save("D:\" & cboxTexture.SelectedItem.ToString().Replace("/", "-"), _
  Imaging.ImageFormat.Png)
			Catch ex As Exception
			End Try
			'picTexture.Image = tex
		End If
		picTexture.Refresh()
	End Sub
dieser Code erzeugt bei 2 exakt gleich großen Texturen (256x256) unterschiedliche Fehler.

Bei der ersten Textur terrain.png wird an einer stelle, aus mir unerklärlichen Gründen trotz benutzung von DrawImageUnscaled eine Zeile und Spalte 2 mal hintereinander gezeichnet, die in das tex Bitmap gezeichnete Version ist dadurch 257x257 Pixel groß.

Bei beiden Texturen spinnt die DrawImage Funktion in der Weise dass, obwohl ich die 2 256x256 Texturen auf exakte 512x512 skaliere, die Texturen links oben um 1 pixel abgeschnitten werden.
Ich hatte schon die vermutung das sie einfach aus dem der PictureBox gerutscht sind und hab daher das Offset etwas nach rechts unten verschoben aber der Abschnitt blieb.

Zur veranschaulichung habe ich mal das Ergebnis des Codes für beide Texturen hochgeladen




Bei der terrain Textur kann man in der mitte sehen das diese 2 Pixel in die im Hintergrund skalierte Version reinragt, die art Textur aber nur um einen Pixel (eigentlich sind es nur 1 bzw kein Pixel die die beiden rein ragen aber es sieht so aus weil die skalierte Version im Hintergrund 1 Pixel nach links oben gerutscht ist). Die doppelte Reihe bei der terrain Textur habe zumindest endecken können, an dem grünen ding links oben das der Kaktus von oben sein soll und an dem Holzstück darüber sieht man das eine Reihe doppelt ist.

Da ich mir unsicher bin ob es an meinem .NET liegt das eh schon einen Fehler beim debuggen hat, (kann keine Tooltips mit einem + mehr aufklappen da sie dauernd verschwinden) hab ich ein Testprojekt erstellt das den selben Code verwendet um beide Texturen auf die selbe Art in gleich große PictureBoxen zu zeichnen.

http://ul.to/oaru66

Sofern jemand so nett wäre und das Testprojekt bei sich startet und mir sagt ob die angezeigten Texturen wie auf den von mir hochgeladenen Versionen aussehen kann ich dann feststellen ob GDI+ einen Fehler hat oder mein .NET einfach beknackt geworden ist.

So oder so brauche ich aber wohl eine alternative zum skalieren und manipulieren von Bildern für mein Programm. Wenn also jemand eine kostenlose kennt schreibt mir bitte wo ich sie kriegen kann und wo ich am besten nachlesen kann wie ich sie benutze. Warscheinlich muss ich DirectX oder OpenGL nehmen, oder einfach mein System Nuken und neu machen.

Ich danke hiermit allen die mir bei meinen Fragen und Problemen helfen bzw geholfen haben. ^^

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Probleme mit Bildern in GDI+ mit VB2005EE2.491Bloody Rain25.02.11 05:41
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.782Manfred X25.02.11 14:29
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.800Bloody Rain25.02.11 17:01
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.724Maas25.02.11 17:36
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.754Bloody Rain25.02.11 19:54
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.858Preisser25.02.11 20:04
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.809Bloody Rain25.02.11 20:35
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.740Preisser25.02.11 21:28
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.803Bloody Rain25.02.11 21:34
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.730Preisser25.02.11 21:43
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.693Bloody Rain25.02.11 21:50
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.746Bloody Rain01.03.11 00:29
Re: Probleme mit Bildern in GDI+ mit VB2005EE1.722Bloody Rain01.03.11 02:31

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel