Handling großer Bilder(Tileset)

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

FunkMonk

Betreff: Handling großer Bilder(Tileset)

BeitragFr, Jul 15, 2011 4:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Folgende Problematik:
Ich schreibe grade meinen Mapeditor von B3D auf Blitzmax um. Anscheinend geht Blitzmax aber anders mit Bildern um als B3D dies tut.
Dort konte ich ohne Probleme einen Ausschnitt(256*672 Pixel) meines Tilesets(265*11872 Pixel) mittels DrawImageRect auf den Bildschirm bringen.
Versuche ich das gleiche nun in Blitzmax Bekomme ich in der Console folgene Fehlermeldung:
Code: [AUSKLAPPEN]
D3DERR: Unable to create texture


Hier mal Meine bisherige Hauptschleife. Hänge da auch mal das laden der Bilder vor, sollte da etwas anders gemacht werden müssen.

BlitzMax: [AUSKLAPPEN]
Global Tileset:TImage = LoadImage("tilesets\set1.png")				'Laden des Tilesets (Später durch Funktion (werde mehrere Tilesets haben))
If Not Tileset Print "Konnte Tileset nicht laden"
Global ButtonUp:TImage = LoadImage("ui\ButtonUp.png") 'Laden der UI Grafiken
If Not ButtonUp Print "Konnte Button up nicht laden"
Global ButtonDown:TImage = LoadImage("ui\ButtonDown.png")
If Not ButtonDown Print "Konnte Button down nicht laden"
Local ende:Int = 0

While Not ende = 1
Cls

DrawImage(ButtonUp, 0, 0)
DrawImage(ButtonDown, 0, 736)
DrawImageRect(Tileset, 0, 32, 256, 704)
DrawLine 256, 0, 256, 786 'Interface zeichnen
DrawLine 256, 704, 1024, 704
WaitTimer(timer)
If KeyHit(KEY_ESCAPE) ende = 1
Flip 0
Wend


Wär nett wenn da mal wer drüberschauen könnte. In B3D hat es wie gesagt problemlos funktioniert.

greetz
FunkMonk
 

PhillipK

BeitragFr, Jul 15, 2011 7:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja Smile

ich gehe mal davon aus, das du mit Graphics() bereits eine Graphische oberfläche erstellt hast.

Da du auf große bilder anspielst, so tippe ich darauf, das dein Tileset das problem ist.
Weiter nehme ich an, da es ein Tileset ist, haben alle tiles die selbe größe/breite.

Wenn dem so ist, würde ich dir eher empfehlen, mal LoadAnimImage() auszuprobieren.
Als parameter erwartet es das bild, das du laden möchtest, sowie die Width/height einer kachel, die erste kachel (anfang: 0) und die anzahl der kacheln (von links nach rechts, von oben nach unten gezählt!) zb 25.

Damit ist es dir möglich, den entsprechenden index der kachel bei DrawImage() mit anzugeben (als frame index!)

Allerdings, wenn ich mir so den Fehler angucke, könnte es am Treiber liegen.
Poste doch mal dein ganzes Initialsieren (dh Setzen von grafiktreiber, erstellen der oberfläche, sonstige einstellungen) - vllt ist da ja irgendwo der Wurm drin Smile

Aber wirklich helfen kann ich dir leider nicht, dieser fehler ist mir unbekannt & ich selbst hatte nie probleme beim laden von bildern. Es war maximal sau lahm, aber lief immer (egal wie groß Very Happy)

Noobody

BeitragFr, Jul 15, 2011 10:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Da Max2D auf 3D-Beschleunigung setzt, werden geladene Bilder auf Zweierpotenzen gerundet (aus 256x11872 wird also 256x16384) und dann auf eine 3D-Textur kopiert. 256x16384 ist aber natürlich weit über der maximalen Texturgrösse, die eine normale Grafikkarte unterstützt (aus Kompatibilitätsgründen sollte man 4096 nicht überschreiten). Du musst daher dein Tileset auf mehrere Bilder aufteilen, so dass jedes Bild eine bestimmte Grösse (z.B. 512x512 oder 1024x1024) nicht überschreitet.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

PhillipK

BeitragFr, Jul 15, 2011 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach mist. Die größenangabe hatte ich garnicht gesehen oO

Mal anders gefragt - warum ist deine Textur so groß?
Sind es zich tausend Tiles auf einem Bild? Oder evtl sogar mehrere Themes zusammen?
Hier lässt sich bestimmt ein wenig sinnvoller ordnen und auslagern Smile
 

FunkMonk

BeitragFr, Jul 15, 2011 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Sind knapp 3000 Tiles. Diese werden aber auch (fast) alle in dem Projekt verwendung finden.

Wenn ich das ganze mit LoadAnimImage lade und dann in ner schleife die Tiles einzelnd zeichne funktioniert dass ganze aber anscheinend. (Ich weiß auch nicht mehr den Grund weshalb ich bei B3D mit DrawImagerect gearbeitet habe. Aber iwas war da.)

Trotsdem werde ich wohl das große Tileset noch im mehrere kleine splitten.

Nun weiß ich wenigstens woher das Problem kommt.

Besten Dank
FunkMonk

BladeRunner

Moderator

BeitragFr, Jul 15, 2011 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein einfacher Workaround wäre auch dein Tileset anders anzuordnen:
256 * 16384 ginge auch als 2048*2048 ohne Informationsverlust.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group