Seite 2 von 2
Verfasst: 04.11.2004 20:51
von remi_meier
@S.M.
Kann man irgendwie die Kantenglättung ausschalten bei deinem Code? Ich bekomme beim Zoomen so immer schwarze Ränder.
Danke
remi
Verfasst: 05.11.2004 10:45
von Stefan
Hi remi_meier
Entweder du erstellst dein Sprite im Hauptspeicher(#PB_Sprite_Memory)
oder du verwendest diese langsame Funktion:
Code: Alles auswählen
Procedure ResizeSpriteWithoutAA(Sprite,Width,Height);Gibt bei Fehler 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
*DDS\GetDC(@DC)
*DDS2\GetDC(@DC2)
SetStretchBltMode_(DC2,#COLORONCOLOR)
StretchBlt_(DC2,0,0,Width,Height,DC,0,0,SpriteWidth(Sprite),SpriteHeight(Sprite),#SRCCOPY)
*DDS\ReleaseDC(DC)
*DDS2\ReleaseDC(DC2)
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
Gruß
Stefan
Verfasst: 05.11.2004 16:43
von ParkL
Hm. Also ich würde das ganz anders machen. Lade die Sprites die du brauchst immer zuerst als "normales" Image. Danach malst du das Sprite mit startdrawing(spriteoutput()) auf ein leeres sprite und benutzt es dann.
Wenn Du dann einen resize benötigst, greifst du einfach auf das Original-Image zu und machst ein neues Sprite auf das Du ein resiztes Image draufmalst.
Sowas ähnliches hab ich auch schonmal benutzt, das ist performanter als man denkt.
Verfasst: 07.11.2004 10:54
von remi_meier
Danke euch beiden!
Habs nur für dieses kleine Minispiel gebraucht:
Bubble
greetz
remi
Verfasst: 08.11.2004 19:38
von nco2k
@remi_meier
schönes prog, gefällt mir.
c ya,
nco2k
Verfasst: 08.11.2004 21:57
von bluejoke
6000 Punkte, saugeil!
eine Alt+F4 "Unterstützung" wär vielleicht ganz nett
Verfasst: 08.11.2004 22:03
von remi_meier
Rekord von mir im Moment: 8800

Bedienung: ESC zum Abbrechen, P für Pause
Neuer Link:
http://mypage.bluewin.ch/remimeier/zip/Bubble.zip
Re: Sprite vergrößern
Verfasst: 23.06.2010 15:46
von ralle
Der Thread ist zwar schon ein bisl älter, aber da ich gerade das selbe Problem hatte und finde, dass die bisher geposteten Codes unnötig komplex sind poste ich mal, ganz nach ParkL's Ansatz meine Lösung:
Code: Alles auswählen
UseJPEGImageDecoder()
InitKeyboard()
InitSprite()
image.l = LoadImage(#PB_Any, "background.jpg")
OpenScreen(1024, 768, 32, "testImageResizeToSprite")
w.l = 700
h.l = 200
sprite.l = CreateSprite(#PB_Any, w, h)
ResizeImage(image, w, h)
StartDrawing(SpriteOutput(sprite))
DrawImage(ImageID(image), 0, 0)
StopDrawing()
Repeat
ClearScreen(RGB(0, 0, 0))
DisplaySprite(sprite, 0, 0)
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
CloseScreen()
End
Vielleicht kann das ja irgendwer brauchen.
mfG
Ralle
PS: Funktioniert bei mir mit DX7, sowie auch DX9 als Subsystem.