Seite 1 von 2
Sprite vergrößern
Verfasst: 26.10.2004 12:01
von Lukas-P
Verfasst: 26.10.2004 13:32
von Lukas-P
Hsllo??? weis das keiner
Verfasst: 26.10.2004 13:48
von KeyKon
ResizeImage(#Image, Breite, Höhe)
ist das einzige was mir spontan einfällt
und wenns dir wichtig ist sowas kann man auch selber schreiben
KeyKon
Verfasst: 26.10.2004 13:59
von Lukas-P
Danke für die Idee. Darauf bin ich noch bnicht gekommen

. ich hab mir das jetzt selber geschrieben
Code: Alles auswählen
Procedure Resizesprite(endsprite,pfad$,breite,weite)
LoadImage(100,pfad$)
ResizeImage(100,breite,weite)
SaveImage(100,"rezize.bmp")
LoadSprite(endsprite,"rezize.bmp")
EndProcedure
Verfasst: 26.10.2004 16:34
von PMV
Für Sprites ... wie wäre es mit der Sprite3D Lib, oder kommt die für dich nicht in Frage?
Code: Alles auswählen
TransformSprite3D(#Sprite3D, x1, y1, [z1], x2, y2, [z2], x3, y3, [z3], x4, y4, [z4])
^^müsstest nur wissen, wie man damit umgeht, aber dafür ist die PB Hilfe ja da
MFG PMV
Verfasst: 30.10.2004 00:37
von Andre
PMV hat geschrieben:Für Sprites ... wie wäre es mit der Sprite3D Lib, oder kommt die für dich nicht in Frage?
Code: Alles auswählen
TransformSprite3D(#Sprite3D, x1, y1, [z1], x2, y2, [z2], x3, y3, [z3], x4, y4, [z4])
^^müsstest nur wissen, wie man damit umgeht, aber dafür ist die PB Hilfe ja da
Tzzz, tzzz...
Ich kenn mich mit den 3D-Sachen selbst nur wenig aus, daher kann ich diese Hilfe nicht selbst erweitern. Wer gute Vorschläge hat, nur her damit.

Verfasst: 30.10.2004 01:16
von Ynnus
3DSprites sind leider dadurch etwas beschränkt, dass sie immer gleiche Proportionen haben müssen, also 32 x 32, 64 x 64, 128 x 128. Wenn man beliebig große Sprites vergrößern oder verkleinern will, hätte man da auf manchen Systemen ein problem da es da zu Fehlern kommen kann wenn die Größen nicht korrekt sind. Also die Idee mit Umwandlung in Image, Größenänderung und zurück find ich garnicht schlecht.

Verfasst: 01.11.2004 00:32
von blbltheworm
könnte man nicht mit CatchImage() irgendwie das Sprite in ein Image kopieren, dann resizen und zurück in ein Sprite Kopieren (das dann mit CatchSprite()).
Ich hab nur leider keine Ahnung wie das geht

, bräuchte es jedoch selbst auch.
Verfasst: 01.11.2004 17:13
von PMV
3DSprites sind leider dadurch etwas beschränkt, dass sie immer gleiche Proportionen haben müssen, also 32 x 32, 64 x 64, 128 x 128. Wenn man beliebig große Sprites vergrößern oder verkleinern will, hätte man da auf manchen Systemen ein problem da es da zu Fehlern kommen kann wenn die Größen nicht korrekt sind.

... oh je stimmt ja -_- irgend wie bin immer nur von der annahme aus gegangen, das nur das Anfangssprite diese maße haben muss -_-.
Naja, aber es heißt doch, das neuere Grafikkarten das können, egal welche Größe die Sprites haben ... kommt also auf sein Anwendungsgebiet hat
Hm, ging es denn, wenn man ein Sprite belibieg Transformiert (mit 3D Sprite) und dieses dann in ein normales Sprite umwandelt. Oder würde das dann bei diesen Systemen, wo zwischengrößen nicht funktioniert, das ganze auch nicht klappen?
Ich kann so was leider nicht testen, ich hab ein System wo ich damit bis jetzt noch keine Probleme hatte
MFG PMV
Verfasst: 02.11.2004 10:54
von Stefan
Hallo
Hier ein Lösungsvorschlag,der DirectDraw benutzt:
Code: Alles auswählen
#DDBLT_WAIT=16777216
Structure PB_Sprite
Sprite.l
Width.w
Height.w
Depth.w
Mode.w
FileName.l
RealWidth.w
RealHeight.w
ClipX.w
ClipY.w
EndStructure
Procedure ResizeSprite(Sprite,Width,Height);Gibt bei Fehlern 0 zurück.
If Width<=0 Or Height<=0:ProcedureReturn 0:EndIf
*Sprite.PB_Sprite=IsSprite(Sprite)
If *Sprite=0:ProcedureReturn 0:EndIf
*DDS.IDirectDrawSurface7=*Sprite\Sprite
If *DDS=0:ProcedureReturn 0:EndIf
*DDS\GetDDInterface(@*DD.IDirectDraw7)
If *DD=0:ProcedureReturn 0:EndIf
DDSD=AllocateMemory(124)
If DDSD=0:ProcedureReturn 0:EndIf
PokeL(DDSD,124)
If *DDS\GetSurfaceDesc(DDSD):FreeMemory(DDSD):ProcedureReturn 0:EndIf
PokeL(DDSD+8,Height)
PokeL(DDSD+12,Width)
If *DD\CreateSurface(DDSD,@*DDS2.IDirectDrawSurface7,0):FreeMemory(DDSD):ProcedureReturn 0:EndIf
rect.RECT
rect\left=0
rect\right=Width
rect\top=0
rect\bottom=Height
If *DDS2\Blt(rect,*DDS,0,#DDBLT_WAIT,0):FreeMemory(DDSD):*DDS\Release():ProcedureReturn 0:EndIf
FreeMemory(DDSD)
*DDS\Release()
*Sprite\Sprite=*DDS2
*Sprite\Width=Width
*Sprite\Height=Height
*Sprite\RealWidth=Width
*Sprite\RealHeight=Height
*Sprite\ClipX=0
*Sprite\ClipY=0
ProcedureReturn *DDS2
EndProcedure
;Test:
InitSprite()
InitKeyboard()
OpenScreen(800,600,16,"ResizeSprite()")
CreateSprite(1,128,128)
StartDrawing(SpriteOutput(1))
For M=0 To 500
Circle(Random(128),Random(128),10,Random($FFFFFF))
Next
BackColor(0,0,0)
FrontColor(255,255,0)
DrawingFont(GetStockObject_(#ANSI_VAR_FONT))
DrawText("Press enter to quit.")
StopDrawing()
DisplaySprite(1,0,0)
ResizeSprite(1,256,128)
DisplaySprite(1,128,0)
ResizeSprite(1,256,256)
DisplaySprite(1,384,0)
ResizeSprite(1,100,100)
DisplaySprite(1,640,0)
FlipBuffers()
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Return)
Gruß
Stefan