Vampire Demo (Amiga) This example is really shows how to use palette mapping to do pixel format conversions from 16bit to 32bit. The all artwork is 16bit, and before you ask i've no idea what it from.. It was just sent to me a while back.. Meant to post this earlier, but forgot :)
[pbcode]
path$="Gfx\"
startTime=Timer()
ThisFILE$ =Path$+"back-2-BE.bmp"
BackDropIMAGE =ReadBM(ThisFILE$,1)
Type tAnim
FileName$
Width
Height
Count
Frames(64)
EndType
DIm Anim(100) as tAnim
Type tSprite
X#,Y#
SpeedX#
AnimIndex
FrameIndex#
FrameSpeed#
EndType
Dim Sprite as tSprite LIst
AnimTimeInFrames = 100
// --------------------------------------------------------------
// ----[ KNIGHT ] -----------------------------------------------
// --------------------------------------------------------------
Sprite = New tSprite
Sprite.AnimIndex =NewAnim(Path$+"walk-1-BE.bmp",259)
Sprite.X# =100
Sprite.Y# =480
Sprite.SpeedX# = 1
Sprite.FrameSpeed# = 0.2
Sprite.FrameSpeed# = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames*1.20 )
// --------------------------------------------------------------
// ----[ AMAZON ] -----------------------------------------------
// --------------------------------------------------------------
Sprite = New tSprite
Sprite.AnimIndex =NewAnim(Path$+"walk-2-BE.bmp",248)
Sprite.X# =250
Sprite.Y# =480
Sprite.SpeedX# = 1.4
Sprite.FrameSpeed# = 0.20
Sprite.FrameSpeed# = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames )
// --------------------------------------------------------------
// ----[ WIZARD ] --------------------------------------------------
// --------------------------------------------------------------
Sprite = New tSprite
Sprite.AnimIndex =NewAnim(Path$+"walk-3-BE.bmp",216)
Sprite.X# =400
Sprite.Y# =480
Sprite.SpeedX# = 0.8
Sprite.FrameSpeed# = 0.20
Sprite.FrameSpeed# = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames )
// --------------------------------------------------------------
// ----[ ELF ] --------------------------------------------------
// --------------------------------------------------------------
Sprite = New tSprite
Sprite.AnimIndex =NewAnim(Path$+"walk-4-BE.bmp",240)
Sprite.X# =550
Sprite.Y# =480
Sprite.SpeedX# = 1
Sprite.FrameSpeed# = 0.20
Sprite.FrameSpeed# = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames )
// --------------------------------------------------------------
// ----[ DWARF ] --------------------------------------------------
// --------------------------------------------------------------
Sprite = New tSprite
Sprite.AnimIndex =NewAnim(Path$+"walk-5-BE.bmp",187)
Sprite.X# =700
Sprite.Y# =480
Sprite.SpeedX# = 1.2
Sprite.FrameSpeed# = 0.20
Sprite.FrameSpeed# = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames)
// --------------------------------------------------------------
// ----[ DWARF ] --------------------------------------------------
// --------------------------------------------------------------
Sprite = New tSprite
Sprite.AnimIndex =NewAnim(Path$+"walk-6-BE.bmp",214)
Sprite.X# =850
Sprite.Y# =480
Sprite.SpeedX# = 1.5
Sprite.FrameSpeed# = 0.20
Sprite.FrameSpeed# = AnimSpeed(Sprite.AnimIndex,AnimTimeInFrames)
#print "Total LOAD TIME:"+STR$(Timer()-StartTime)+" Milliseconds"
SetFps 60
; ---------------------------------------------------
Do
; ---------------------------------------------------
DrawImage BackDropIMAGE,XPOS,0,false
DrawImage BackDropIMAGE,XPOS-GetImageWidth(BackDropIMAGE),0,false
XPOS = wrapvalue(XPOS-1,0,GetImageWidth(BackDropIMAGE))
For Each Sprite()
// Get the animation this sprite is using
AnimIndex =Sprite.AnimINDEX
// Move the animation forward
FrameIndex#=Sprite.FrameIndex#
Frame =Anim(AnimIndex).Frames(Floor(FrameIndex#))
Sprite.FRameIndex# =mod( FrameIndex# + Sprite.FRameSpeed# , Anim(AnimIndex).count)
// Move sprite forward (Right to left)
x#=mod(Sprite.X#+Sprite.SpeedX#, GetScreenWidth()+200)
Sprite.X#=x#
X#=X#-(GetImageWidth(Frame)/2)-100
Y#=Sprite.Y#-(GetImageHeight(Frame))
// frame this frame
DrawImage Frame,x#,y#,true
next
sync
; ---------------------------------------------------
loop
; ---------------------------------------------------
Function AnimSpeed(ThisAnim,Frames)
Speed#=float(Anim(ThisANIM).Count)/Frames
EndFunction Speed#
Function NewAnim(ThisFIle$,FrameHeight)
ThisIMAGE=ReadBM(ThisFILE$)
if ThisImage
frameWidth=GetImageWidth(ThisIMAGE)
Frames = GetImageHEIGHT(ThisImage) /FrameHeight
Index = GetFreeCEll(Anim())
Anim(Index) = new tANIM
Anim(Index).FileName$ = ThisFile$
Anim(Index).Width = FRameWIDTH
Anim(Index).Height = FRameHEIGHT
For lp=0 to FRames-1
ThisFrame = NewImage(FRameWidth,FRameHeight,2)
CopyRect ThisIMAGE,0,Ypos,FrameWidth,Ypos+FrameHeight,ThisFrame,0,0
ImageMaskCOlour ThisFRAME,$F800F8
Anim(index).Frames(lp) = ThisFRAME
Anim(index).Count++
Ypos+=FRameHeight
next
deleteImage ThisIMAGE
endif
EndFunction INDEX
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// ----------------------->> READ BITMAP (PALETTE MAPPED) << ---------------------
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
#include "PBI"
#include "PaletteMapping"
Function ReadBM(ThisFILE$,IMageFormat=2)
if FileExist(ThisFILE$)
size=FileSize(Thisfile$)
if Size>64
Fh=readnewFile(ThisFILE$)
if fh
ThisBank=NewBank(Size)
Ptr=GetbankPtr(ThisBank)
ReadMemory FH,Ptr,Size
CloseFile FH
Static PixelConversionsPreCalc_Flag
if PixelConversionsPreCalc_Flag=0
dim _PixelConversionsPalette($10000)
For lp=0 to $ffff
ThisRGB = SwapLowBytes(LP)
ThisRGB = RGB16toRGB24(ThisRGB)
_PixelConversionsPalette(lp)= ThisRGB
next
PixelConversionsPreCalc_Flag=1
endif
ThisCHR0=PeekByte(Ptr)
ThisCHR1=PeekByte(Ptr+1)
if ThisCHR0=asc("B") and ThisCHR1=asc("M")
BitMapSIZE =PeekInt(Ptr+2)
Width =(PeekInt(ptr+18))
Height =(PeekInt(ptr+22))
PixelsOffset = PeekInt(Ptr+10)
ThisImage = NewIMage(Width,Height,IMageFormat)
RenderToImage ThisIMAGE
StartTime=Timer()
SetPalette _PixelConversionsPalette()
Lockbuffer
Modulo= Width*2
ThisPIXEL =POint(0,0)
For Ylp=0 to Height-1
Address =Ptr+PixelsOffset
Address +=(Ylp*Modulo)
DrawPaletteMappedStrip16(0,ylp,Address,Width,$ffff)
next
UnLockbuffer
#print "Conversion Time:"+Str$(Timer()-StartTime)
endif
rendertoscreen
deletebank ThisBANK
; Un comment to save failes as PBI
;SaveName$=replace$(ThisFile$,".bmp",".pbi")
;if lower$(ThisFile$)<> lower$(SaveName$)
; SavePBIex SaveName$,THisIMage, 32,32 ;, 64,16
;endif
endif
endif
endif
EndFunction ThisIMAGE
[/pbcode]
Video Download Download [plink] Vampire Demo (http://www.underwaredesign.com/requestfile.php?file=VampirePBsxhnFjaksxasfdasf454)[/plink]