[erledigt] Kann man TImage erweitern?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

d-bug

Betreff: [erledigt] Kann man TImage erweitern?

BeitragSa, Sep 23, 2006 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich versuche hier verzweifelt TImage zu erweitern. Mein Ansatz :
Code: [AUSKLAPPEN]
Type TMyImage Extends TImage

   Function Open:TMyImage (url:Object)
      Local image:TMyImage = TMyImage(TImage.Load(url,MASKEDIMAGE,255,0,255))
      Return image
   End Function

End Type

So, warum, zum ..., lässt sich TImage nicht Casten? Die Funktion Open gibt
immer nur Null zurück. Das Image existiert natürlich und wird mit normalem
LoadImage auch geladen.

Natürlich ist das da oben nur ein Dummy.

cheers
  • Zuletzt bearbeitet von d-bug am Sa, Sep 23, 2006 16:43, insgesamt einmal bearbeitet

Blacal

BeitragSa, Sep 23, 2006 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Servus,

Naja, du kannst nur das zu TMyImage casten, was auch ein TMyImage ist. TImage.Load gibt nämlich ein TImage zurück, welches kein TMyImage ist.

so casten kannst du nur, wenn das TImage vorher auch als TMyImage angelegt wurde:
Code: [AUSKLAPPEN]

Local myImage:TMyImage = new TMyImage()
...
Local image:TImage = myImage
...
Local gecastet:TMyImage=TMyImage(image)


Hier wird eine neues TMyImage erstellt, anschließen als TImage betrachtet, und danach wieder zu TMyImage gecastet - klappt wunderbar.
 

Dreamora

BeitragSa, Sep 23, 2006 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Es tut mir leid das sagen zu müssen, aber BM interne Kernklassen wie TImage, TGadget und einige andere, können nicht extended werden ohne die gesamte Funktionalität zu kopieren.

So müsste das ganze für deine TMyImage aussehen:
(ich bitte zu beachten, dass der Compiler nicht motzt obwohl die Returntypen von Create und Load sich elementar von denen unterschieden die TImage hat, was normalerweise nicht erlaubt ist -> wird intern garnicht erst extended wie es scheint)
Code: [AUSKLAPPEN]

Strict

Import brl.max2d

Type TMyImage Extends TImage

   Function Create:TMyImage( width,height,frames,flags,mr,mg,mb )
      Local t:TMyImage=New TMyImage
      t.width=width
      t.height=height
      t.flags=flags
      t.mask_r=mr
      t.mask_g=mg
      t.mask_b=mb
      t.pixmaps=New TPixmap[frames]
      t.frames=New TImageFrame[frames]
      t.seqs=New Int[frames]
      Return t
   End Function

   Function Load:TMyImage( url:Object,flags:Int,mr:Int,mg:Int,mb:Int )
      Local pixmap:TPixmap=TPixmap(url)
      If Not pixmap pixmap=LoadPixmap(url)
      If Not pixmap Return
      Local t:TMyImage=TMyImage.Create( pixmap.width,pixmap.height,1,flags,mr,mg,mb )
      t.SetPixmap 0,pixmap
      Return t
   End Function
End Type


Graphics 800,600, 0

Global test:TMyImage   = TMyImage.Load("c:\t1.png",MASKEDIMAGE,255,0,255)
If Not test      RuntimeError "No image loaded"

DrawImage test, 0, 0
Flip

WaitKey
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

d-bug

BeitragSa, Sep 23, 2006 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal Danke für die Information, Dreamora. Leider hatte ich mir sowas
ähnliches schon gedacht. Schade eigentlich, denn nun ist es leichter für
mich eine komplett neue Klasse zu erstellen mit einem TImage als Field und
den erweiterten Daten, die ich brauche. Das ist schlichtweg zum kotzen!

@Blacal
Auch dir meinen Dank, auch wenn du eigentlich nichts anderes da machst
als ich. Wink Leider hast du nicht versucht TMyImage danach mal zu zeichnen,
denn dann wäre dir aufgefallen, dass deine Variante genau so wenig funktioniert
wie meine. Very Happy

Naja, kann man nichts machen.

cheers

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group