ScaleImage/ResizeImage, wie macht man es richtig?
Übersicht

![]() |
SkabusBetreff: ScaleImage/ResizeImage, wie macht man es richtig? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich progge imemrnoch an meinem RPG-Mapeditor.Nun versuche ich
gerade mit eigentlich recht schnellem Erfolg eine Zoomfunktion einzubauen. Und zwar 1/1 also normale Größe 1/2 halbiert 1/4 geviertelt, 1/8 ein achtel der orginalgröße.... Problem was ich immerwieder hab ist da sich scheinbar net raffe wo wie und wann man nun was einsetzen kann. Ich hab ne einfache Variable definiert die ausdrückt um wieviel die Orginalgröße geteilt werden muss. Problem ist nun wenn ich einen Streckungsfaktor(strFa) habe und beim neuladen des Tilesets die Größe der Tiles anpasse bekomme ich bei 1/2(also strFa = 2) keinen MAV. Sobald strFa 4 ist bekomme ich ein MAV. Es liegt sicher daran das ScaleImage keine Werte mit Kommazahlen akzeptiert.Ich kanns aber nicht anders machen, da ich ansonsten ja keinen genauen Faktor habe um den das ganze verkleinert wurde. Hier mein Code: Code: [AUSKLAPPEN] Local strX# = 2 / strFa Local strY# = 2 / strFa ;das tileset wird neu geladen um den zoomfaktor zu übernehmen tileset = 0 tileset = LoadAnimImage(tilePfad,16,16,0,48) ScaleImage(tileset,strX,strY) Wenn ich strFa nun auf 2 setze(also die Anzeige der Map um die Hälfte verkleinere) wird die Anzeige korrekt dargestellt. Bei 1/4(also strFa = 4) bekomme ich nen MAV. Jemand hier hatte nen ähnliches Problem der konnte es aber durch die genaue Deklairung des Variablentyps lösen. Bei mir klappt das nicht.Hat da jemand ne idee? ![]() MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Local strX# = 2.0 / strFa , und strFa bitte als float deklarieren.
Blitz schneidet sonst die Nachkommastellen ab und versucht auf 0 zu resizen, und das geht in die Hose. Alternativ bleibt nur noch die Möglichkeit strx und stry auf ihren Wert zu prüfen und sollte der 0 sein auf 1 anzuheben. |
||
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 |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Local strY# = 2 / strFa wi kommt die 2 her ich denk mir das nämlich so:
/ hat keinen float gefunden: gibt also einen int zürück ist strFa =1 2/1=2 dh doppelte größe(?) ist strFa =2 2/2=1 dh halb normal größ also halb so groß wie davor idt strFa =4 2/4 =0 ,wegen der int..... und das das n mav wird.... die idee wäre 1.0/strFa |
||
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat Folgendes geschrieben: Code: [AUSKLAPPEN]
Local strX# = 2.0 / strFa , und strFa bitte als float deklarieren.
Blitz schneidet sonst die Nachkommastellen ab und versucht auf 0 zu resizen, und das geht in die Hose. Alternativ bleibt nur noch die Möglichkeit strx und stry auf ihren Wert zu prüfen und sollte der 0 sein auf 1 anzuheben. Das habe ich bereits versucht....Seltsamerweise verwurschtelt mir das dann die Darstellung meiner aktuellen Map. Mein Mapanzeigealgorithmus sieht so aus: Code: [AUSKLAPPEN] ;die Karte wird gezeichnet For y = 0 To MapY For x = 0 To MapX DrawImage tileset,(x * (32 / strFa)) - ((WB3D_GetSpinnerPos(navSpinnerX) - (20 * scrSize)) * (32 / strFa)),y * (32 / strFa) - ((WB3D_GetSpinnerPos(navSpinnerY) - (15 *scrSize )) * (32 / strFa)) ,map(x,y) Next Next Wenn ich strFa als float deklaiere funktioniert zwar das Zoomen aber dann wird die karte nicht mehr richtig dargestellt..... MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ;die Karte wird gezeichnet
For y = 0 To MapY For x = 0 To MapX DrawImage tileset,(x * (32.0 / strFa)) - ((WB3D_GetSpinnerPos(navSpinnerX) - (20 * scrSize)) * (32.0 / strFa)),y * (32.0 / strFa) - ((WB3D_GetSpinnerPos(navSpinnerY) - (15 *scrSize )) * (32.0 / strFa)) ,map(x,y) Next Next Vielleicht so, bin mir aber nicht sicher^^ |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde sagen, lass es, scaleimage und resizeimage sind für echtzeiteffekte einfach viel zu langsam, besonders bei nem Mapeditor, wo du einiges an Tiles hast, die alle auf einmal verändert werden.
Falls du B3D hast, mach es lieber mit sprites, dort kannst du dann mit der Camera "rauszoomen" indem du sie einfach höher setzt und das auch noch stufenlos. Außerdem werden deine Bilder mit deiner Methode wahrscheinlich nach dem ersten mal verkleinern und dann wieder vergrößern ziemlich schlecht aussehen. Falls du bei deiner Methode bleiben möchtest, berechne die Bilder lieber vorher und lade jede einzelne Detailstufe als animiertes Bild, dann brauchst du nur noch die Tilegröße als variable ändern und ne Abfrage der Detailstufe schreiben, welches Tileset nun dargestellt werden muss. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
Skabus |
![]() Antworten mit Zitat ![]() |
---|---|---|
skey-z hat Folgendes geschrieben: Ich würde sagen, lass es, scaleimage und resizeimage sind für echtzeiteffekte einfach viel zu langsam, besonders bei nem Mapeditor, wo du einiges an Tiles hast, die alle auf einmal verändert werden.
Falls du B3D hast, mach es lieber mit sprites, dort kannst du dann mit der Camera "rauszoomen" indem du sie einfach höher setzt und das auch noch stufenlos. Außerdem werden deine Bilder mit deiner Methode wahrscheinlich nach dem ersten mal verkleinern und dann wieder vergrößern ziemlich schlecht aussehen. Falls du bei deiner Methode bleiben möchtest, berechne die Bilder lieber vorher und lade jede einzelne Detailstufe als animiertes Bild, dann brauchst du nur noch die Tilegröße als variable ändern und ne Abfrage der Detailstufe schreiben, welches Tileset nun dargestellt werden muss. Ja ich ahb B3D. Auf die Idee bin ich noch nicht gekommen, das werde ich mal ausprobieren. Was das Zoomen angeht: Immer wenn gezoomt werden soll wird das gewählte Tileset neu geladen und dann sofort skaliert.Also nur ein einziges Mal.Das macht es denke ich nicht so langsam. Zum Problem: Ich weis nicht warum mein Anzeigealgorithmus keine float-Variablen akzeptiert.Aber ich hab einfach alles mit int() konvertiert. Das ist vielleicht nicht die beste Lösung, aber es funktioniert. Ich werd mir noch mal ne andere Lösung ausdenken...Sprites wären da ja eine gute Idee! Vielen Dank^^ MfG Ska |
||
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat
aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit! Ein SNES-RPG mit Handels- und Wirtschaftselemente. Infos?Hier: http://www.blitzforum.de/worklogs/234/ Besucht meine Seite: www.seelenfriedhof.de.vu |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Was das Zoomen angeht: Immer wenn gezoomt werden soll wird das
gewählte Tileset neu geladen und dann sofort skaliert.Also nur ein einziges Mal.Das macht es denke ich nicht so langsam. Natürlich, wenn nicht sogar noch ein wenig langsamer, weil du die Datei(en) jedesmal neu lädst. Am einfachsten wäre es wenn du sie vorher skalierst, es gibt einige Tools, die Batchkonvertierung unterstützen, dadurch musst du nicht jedes einzelne Bild bearbeiten. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group