"Fliessende" GrabImage3D in Draw3D? [GELÖST]

Übersicht Ressourcen Andere Programme oder Tools

Neue Antwort erstellen

 

Blitzjockey

Betreff: "Fliessende" GrabImage3D in Draw3D? [GELÖST]

BeitragDo, Mai 27, 2010 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Ich versuche gerade mal wieder mit Draw3D zurecht zu kommen. Dass klappt mittlerweile recht gut, und die Ergebnissen sind immer wieder erstaunlich!
Da ich allerdings Draw3D 2.0 aus irgendeinem Grund noch nicht am Laufen bekomme habe, belasse ich es erst mal bei 1.0, dass reicht schon völlig für meine Zwecken. Denke ich. Bis jetzt zumindest.

Ausser folgendes Problem: Ich versuche gerade ein fliessende Anzeige zu basteln, in der Art wo früher den Index-zähler auf Cassettenspieler angezeigt werden.
Ich habe dafür einen Streifen gezeichnet mit den Zahlen 0 bis 9 über einander, und versuche dann nur eine Abschnitt zu Zeichnen. Dazu nehme ich ein Abschnitt mittels GrabImage3D, wobei ich den gegrabbten Teil fliessend von oben nach unten laufe lasse. Dabei bekomme ich ein Handle , welche ich mittels DrawImage3D auch anzeichen kann.
Nach eine Weile stürzt dann aber mein Programm ab, "GDrawBank is to small" als Fehlermeldung.

Ich nehme an, dass Draw3D den gegrabbte Image, oder zumindest den Handle, nicht freigibt, und anschliessend jeden neuen Frame dementsprechend ein neuen Handle herausgibt - bis den Speicher voll ist.

Kann ich irgendwie auf einfache Weise den Handle wieder freigeben? Oder gibt's irgendwo ein andere Denkfehler den ich mache?

Vielen Dank im Voraus für jeder Hilfe!

blitzj.
  • Zuletzt bearbeitet von Blitzjockey am So, Mai 30, 2010 17:06, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Mai 27, 2010 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Draw3D kann gegrabbte Bilder auf immer die selbe Variable nicht freigeben, da es unmöglich ist auf die Variable zuzugrifen.

Code: [AUSKLAPPEN]
Include "Draw3D.bb"
...
Var = GrabImage3D("jojo.png")

Wie soll ich denn nun die Funktion GrabImage3D wissen, in welche Variable geschrieben wird? Die Funktion hat kein Zugriff auf Var.

Lösungen:

1.) Du gibst zu jedem GrabImage3D zuvor das Handle über FreeImage3D wieder frei. Allerdings sei gesagt, so richtig sauber ist das ganze dann nicht. So ein Programmierstil kann man sich gleich sparen.

2.) Du grabst zu Beginn einmal alle deine 10 Bilder und arbeitest über Frames. Hat jedoch den Nachteil, das zu jedem Frame das Bild anders positioniert werden muß, da automatisch mit ''Middlehandle'' gearbeitet wird.

3.) Du grabst gar nicht in eine Variabe, sondern zeichnest entsprechend direkt aus dem Quellbild. Das geht zum Beispiel mit DrawRect3D. Hat jedoch den Nachteil von 2.), da fängt die große Variablenyongliererei an.

4.) Grab einmal die gesamte Zeile und arbeite mit DrawLine3D im Modus 1. Das ist einfach, sauber und sehr schnell in der Ausführung. Die Koordinaten entsprechen dann auch genau den Angaben wie man es für Balkendiagrame vorsehen würde.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Blitzjockey

BeitragDo, Mai 27, 2010 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Option 4 hört sich gut an (bzw hast Du gut verkauft.. Cool )
Nur, dabei liegt den ganze strich an Zahlen auf dem Bildschirm, oder? Dann müsste ich den Teil den ich nicht brauche irgendwie wieder ausblenden? Oder kann ich trotzdem irgendwie nur eine bestimmte ausschnitt anzeichen?
Dabei wäre das Problem dass das Instrument wo der Anzeige reinkommt, nicht groß genug ist für den ganze Streife mit Zahlen..
Oder übersehe ich da was?

Auf jedem Fall schon vielen Dank, ausser dieses kleines Problem hat Draw3D mir schon unheimlich viel Mühe gespart!

BlitzJ.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Mai 27, 2010 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, ich hatte das irgendwie so verstanden, dass du einen aurrollbaren Streifen haben willst. Sind die Bilder alle gleich groß die du nur austauschen möchtest, dann arbeite doch mit Frames. Dabei grabst du die 10 Bilder einmal und gehst vom Anfangshandle aus, und gehst von dort aus über den Parameter Frame auf die anderen.

Code: [AUSKLAPPEN]
DrawImage3D( Handle, X#, Y#, Button, Angle#, Scale#, Frame )

Beispiele:

Draw3D V.3.2 - Draw3D, GrabImage3D.bb
Draw3D2 V.1.0 - Draw3D2 #07, GrabAnimImage3D.bb

Ansonsten geht auch Möglichkeit 3.), worin allerdings der Verwaltungsaufwand größer wird.

Erläuter sonst dein Problem etwas genauer, dann kann ich dir da auch besser zu einer Lösung verhelfen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Blitzjockey

BeitragDo, Mai 27, 2010 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Konzept das ich versuche zu erreichen, ist ähnlich an den Index den man früher auf Cassettenspieler hatte: 3 Rollen neben einander, beschriftet von 0 bis 9 (über einander, nicht nebeneinander)
Wenn der Anzeige "gelaufen" ist, sind die zahlen natürlich schön fliesend (analog, eben) gedreht, wobei man nur 1 Zahl gesehen hast.
Aber dass kennst Du hoffentlich noch - Oder bin ich wirklich so alt.. Rolling Eyes

Jetzt versuche ich das gleiche zu machen - nur habe ich keine Rolle, sondern eine Streife von Zahlen (alle gleich gross, dass schon) über einander angeordnet.
Wenn ich so eine Streife langsam hoch-ziehe, und dabei nur eine bestimmte Ausschnitt zeige, läuft der Zahl schön ruhig von 0 bis 9 - und anschliessend wieder mit 0 weiter, wobei der rolle links davon (mit dem gleiche Prinzip) ein Zahl steigt.

Also, schon ähnlich an eine Zugriff mittels Frames, nur eben fliessend. und soweit ich weiss, sind Frames immer Integer, dass würde bedeuten, sie springen immer eine ganze Zahl auf einmal weiter?

Ich hoffe ich habe es so etwas besser erklärt, ich versuche schon ein Bild zu finden von so'n alte Anzeige, aber bis jetzt noch nichts gefunden..


EDIT - Tatsächlich, doch noch irgendwo ein Bild gefunden: Trommelzähler

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Mai 28, 2010 0:18
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, alles klar. Mein Vorschlag (on the fly):

Zeichne die Ziffern in ein Bild untereinander (nicht nebeneinander) von 0 bis 9 + 0

Code: [AUSKLAPPEN]
0
1
2
3
4
5
6
7
8
9
0

Wenn beispielsweise der Pixelabstand von Ziffer zu Ziffer 32 Pixel höhe entspricht, dann zeiche über DrawRect3D ( handle, x, y, 0, (Wert/32.0) mod 320, Breite, 32) das Teilbild an die gewünschte Fixposition x,y. Die Variable Wert entspricht dann den Ziffernwert geteilt durch der Pixelhöhe von Ziffer zu Ziffer. Das mod 320 ergibt sich aus 32 Pixel * 10 Ziffern. Dabei darf Wert nicht negativ sein, ansonsten muß noch ein minimaler Workaround mit rein.

Fertig ist die Lauge.

Das gilt für die kleinste Ziffer. Für die nächsten Zehnerstellen muß natürlich - um die Mechanik nachzustellen - entsprechend das so gesteuert sein, dass sie sich - fals nötig - mit der Geschwindigkeit der kleinsten Ziffer mitbewegen. Ist aber eine andere Geschichte und hat nichts mit der Draw3D/Grafikdarstellung zu tun.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

Blitzjockey

BeitragFr, Mai 28, 2010 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Hammer! Genau das habe ich gesucht, nur das ich gedacht habe, mit DrawRect3D zeichnet man Rechtecken, wobei der Stift dann aussieht wie der geladene Textur! Ansonsten hatte ich alles schon so vorbereitet wie Du es auch beschrieben hast, Ziffern über einander, Zahlen durchge-mod-ed.

Ein bisschen tweaken muss ich noch, aber jetzt läuft's im großen und ganzen!

Super, vielen dank!

(Und, vor allem, dass um den Uhrzeit!)

Schöne Grüßen,
BlitzJ.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Mai 28, 2010 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, hab zwar Frühschicht, aber irgendwie konnte ich mich nicht aufs Ohr hauen. Aber gut, das es nun das war. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht Ressourcen Andere Programme oder Tools

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group