Hmm...
thought t I can use your code for fading between two (jpg) pictures, but...
When using RAW format to load the jpegs, the pictures have only 24 bits depth so everything looks scrambled. So my next test was to
use Image_display_format - the images seems to have 32 bit, but I get an error "pointer is null" in the line "*NewVal\rgbRed=(...)" !
Code: Select all
Global FadedImage
FadedImage=CreateImage(999,256,256,32)
; Define
Global Modus=1
Global ScreenX=GetSystemMetrics_(#SM_CXSCREEN)
Global ScreenY=GetSystemMetrics_(#SM_CYSCREEN)
Global FrameSizeX=640
Global FrameSizeY=480
Structure PictStruct
id.l
x.l
y.l
w.l
h.l
EndStructure
Global Dim Picture.PictStruct(2)
; EndDefine
Procedure Scale(nr)
Protected skalierung.f
If IsImage(nr)=0
CreateImage(nr,32,32,#PB_Image_DisplayFormat)
EndIf
Picture(nr)\w=ImageWidth(nr)
Picture(nr)\h=ImageHeight(nr)
If w>FrameSizeX
skalierung=FrameSizeX/Picture(nr)\w
Picture(nr)\w*skalierung
Picture(nr)\h*skalierung
EndIf
If Picture(nr)\h>FrameSizeY
skalierung.f=FrameSizeY/Picture(nr)\h
Picture(nr)\w*skalierung
Picture(nr)\h*skalierung
EndIf
Picture(nr)\w=256
Picture(nr)\h=256
ResizeImage(nr,Picture(nr)\w,Picture(nr)\h,#PB_Image_Smooth)
Picture(nr)\id=ImageID(nr)
Picture(nr)\x=(ScreenX-Picture(nr)\w)>>1
Picture(nr)\y=(ScreenY-Picture(nr)\h)>>1
If 0
Debug picture(nr)\x
Debug picture(nr)\y
Debug picture(nr)\w
Debug picture(nr)\h
EndIf
CreateSprite(nr,Picture(nr)\w,Picture(nr)\h,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(nr))
DrawImage(Picture(nr)\id,0,0,Picture(nr)\w,Picture(nr)\h); because Resize doesn't work
StopDrawing()
CreateSprite3D(nr,nr)
EndProcedure
Procedure Faade(Img1,Img2,c)
Protected d=255-c
Protected hDC
Protected Mem1, Mem2,Mem3
Protected Bmp.BITMAP
Protected X, Y
Protected W2 = ImageWidth(Img2)
Protected H2 = ImageHeight(Img2) ; <---Changed this line
Protected *OldVal1.RGBQUAD ; (didn't matter because image is square anyway)
Protected *OldVal2.RGBQUAD
Protected *NewVal.RGBQUAD
hDC = GetDC_(0)
GetObject_(ImageID(Img1), SizeOf(BITMAP), @Bmp)
Mem1 = Bmp\bmBits
GetObject_(ImageID(Img2), SizeOf(BITMAP), @Bmp)
Mem2 = Bmp\bmBits
ReleaseDC_(0, hDC)
hDC = GetDC_(0)
GetObject_(ImageID(999), SizeOf(BITMAP), @Bmp)
Mem3 = Bmp\bmBits
ReleaseDC_(0, hDC)
For X = 0 To Bmp\bmWidthBytes -1 Step 4 ; <---Changed this line
For Y = 0 To H2 -1 ; <---Changed this line
*OldVal1 = Mem1+X+Bmp\bmWidthBytes*Y ; <---Changed this line
*OldVal2 = Mem2+X+Bmp\bmWidthBytes*Y ; <---Changed this line
*NewVal = Mem3+X+Bmp\bmWidthBytes *Y ; <---Changed this line
*NewVal\rgbRed=((*OldVal1\rgbRed)*c + (*OldVal2\rgbRed)*d)>>8
*NewVal\rgbGreen=((*OldVal1\rgbGreen)*c + (*OldVal2\rgbGreen)*d)>>8
*NewVal\rgbBlue=((*OldVal1\rgbBlue)*c + (*OldVal2\rgbBlue)*d)>>8
*NewVal\rgbRed=y&255;*OldVal1\rgbRed
*NewVal\rgbGreen=*OldVal1\rgbGreen
*NewVal\rgbBlue=*OldVal1\rgbBlue
Next
Next
EndProcedure
Procedure Main()
If (InitSprite() And InitSprite3D() And OpenScreen(ScreenX,ScreenY,32,"Fading"))
CreateSprite(0,16,16,#PB_Sprite_Texture)
;TransparentSpriteColor(Spr,$80808)
StartDrawing(SpriteOutput(0))
Box(0,0,16,16,$80808)
StopDrawing()
CreateSprite3D(0,0)
ZoomSprite3D(0,ScreenX,ScreenY)
UseJPEGImageDecoder()
UsePNGImageDecoder()
LoadImage(1,"data\1.jpg",#PB_Image_DisplayFormat)
LoadImage(2,"data\2.jpg", #PB_Image_DisplayFormat)
Scale(1)
Scale(2)
Faade(1,2,200)
For i=0 To 255 Step 4
pause=GetTickCount_()+50
Select Modus
Case 1
StartDrawing (ScreenOutput())
;DrawImage(Picture(1)\id,Picture(1)\x,Picture(1)\y)
DrawImage(ImageID(999),0,0)
StopDrawing()
Case 2
DisplaySprite(1,Picture(1)\x,Picture(1)\y)
Start3D()
DisplaySprite3D(0,0,0,i)
Stop3D()
DisplaySprite(2,Picture(2)\x,Picture(2)\y)
Case 3
Start3D()
DisplaySprite3D(0,0,0,255)
DisplaySprite3D(1,Picture(1)\x,Picture(1)\y,255-i)
DisplaySprite3D(2,Picture(2)\x,Picture(2)\y,i)
Stop3D()
EndSelect
FlipBuffers()
Repeat
WaitWindowEvent(5)
count+1
If WindowEvent()=#WM_CHAR
quit=999
EndIf
Until GetTickCount_()>pause
If quit : Break : EndIf
Next i
If quit=0 : Delay(1500) : EndIf
EndIf
;MessageRequester(Str(count),"-"
EndProcedure
Main()