Slow motion video
Slow motion video
I'd like to be able to control the speed at which I play videos. I'm writing a program that teaches sign language. And some of the signs are hard to see in regular speed. How hard would it be to make that possible?
-
- Always Here
- Posts: 6426
- Joined: Fri Oct 23, 2009 2:33 am
- Location: Wales, UK
- Contact:
Re: Slow motion video
Hi ron2
In the mean time, if you use animated gif files, you can set the duration of frame display in the file - not only that, but if required, each frame or a group of frames can have a different display duration - so, you might show the sign at a "normal" speed, followed by a slow-mo, followed again by a normal speed.
If you want the User to have control of the speed, then write a routine that displays individual images - after all, videos and animations are simply a way of storing and displaying many still images.
Animated gifs by the way can be displayed as a web page, in a WebGadget.
There are numerous Gif building apps out there - I use Serif DrawPlus. There is a free version of DrawPlus but I don't know if that particular version can be used to make gifs.
In the mean time, if you use animated gif files, you can set the duration of frame display in the file - not only that, but if required, each frame or a group of frames can have a different display duration - so, you might show the sign at a "normal" speed, followed by a slow-mo, followed again by a normal speed.
If you want the User to have control of the speed, then write a routine that displays individual images - after all, videos and animations are simply a way of storing and displaying many still images.
Animated gifs by the way can be displayed as a web page, in a WebGadget.
There are numerous Gif building apps out there - I use Serif DrawPlus. There is a free version of DrawPlus but I don't know if that particular version can be used to make gifs.
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
If it sounds simple, you have not grasped the complexity.
Re: Slow motion video
Wow IdealsVacuum,
You just gave me a whole lot of viable ideals. Thankyou.
You just gave me a whole lot of viable ideals. Thankyou.
Can you point me in the right direction on how to do that?If you want the User to have control of the speed, then write a routine that displays individual images - after all, videos and animations are simply a way of storing and displaying many still images.
-
- Always Here
- Posts: 6426
- Joined: Fri Oct 23, 2009 2:33 am
- Location: Wales, UK
- Contact:
Re: Slow motion video
Well, no. I think what I can do, with some of my old code, is show how not to do it more than how to do it.
The code below loads existing image files on demand*. For your app, you will probably need to embed all the images within the exe (as the button images are here), or you could store them in the Application data folder if you are not worried about somebody stealing them. In the code below, the playback speed can be adjusted by the User. You could do that in the code instead.
* Browse to the first image file, the app finds all the other eligible images in the folder. Works best if all the images are the same size (Height/Width), as they will be in your project.

The code below loads existing image files on demand*. For your app, you will probably need to embed all the images within the exe (as the button images are here), or you could store them in the Application data folder if you are not worried about somebody stealing them. In the code below, the playback speed can be adjusted by the User. You could do that in the code instead.
* Browse to the first image file, the app finds all the other eligible images in the folder. Works best if all the images are the same size (Height/Width), as they will be in your project.
Code: Select all
;A very basic image viewer/slide show app. IdeasVacuum
;### Windows
#Desktop = 0
#WinMain = 1
#Folder = 2
;### Gadgets
Enumeration
#ImageGdgt
#ImageGdgtDummy
#Image
#ImageBackground
#BtnFileOpen
#BtnSave
#BtnCopy
#BtnPaste
#BtnBack
#BtnFwd
#StrFile
#StatusBar
#BtnExit
#BtnSld
#StrDelay
EndEnumeration
;### Fonts
Global FontID1
FontID1 = LoadFont(1, "Tahoma", 10, #PB_Font_HighQuality)
ExamineDesktops()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UseJPEG2000ImageEncoder()
UseJPEG2000ImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
Global Btn01
Global Btn02
Global Btn03
Global Btn04
Global Btn05
Global Btn06
Global Btn07
;### Catch Images
Btn01 = CatchImage(1, ?Btn01)
Btn02 = CatchImage(2, ?Btn02)
Btn03 = CatchImage(3, ?Btn03)
Btn04 = CatchImage(4, ?Btn04)
Btn05 = CatchImage(5, ?Btn05)
Btn06 = CatchImage(6, ?Btn06)
Btn07 = CatchImage(7, ?Btn07)
Global sgImageFullPathOrg.s = Space(1024)
Global sgDefaultPath.s = "C:\Documents and Settings\"
Global sgCurrImage.s = Space(64)
Global sgPat.s = "All Supported Image Files|*png;*jpg;*jpeg;*bmp|Portable Network Graphics PNG|*.png|Joint Photographic Experts Group JPG JPEG|*.jpg;jpeg|Bitmap Image File BMP|*.bmp"
Global sgSavePat.s = "Portable Network Graphics PNG|*.png|Joint Photographic Experts Group JPG JPEG|*.jpg;jpeg|Bitmap Image File BMP|*.bmp"
Global igImageGdgX.i = 0
Global igImageGdgY.i = 35
Global igImageGdgW.i = 720
Global igImageGdgH.i = 600
Global Dim sgImage.s(1024)
Global igImageTotal = 0
Global igListDone = #False
; Window Min/Max Size
Global igWinHeightMax.l = (DesktopHeight(#Desktop) - 80) ; Allow for Task Bar
Global igWinWidthMax.l = (DesktopWidth(#Desktop) -10) ; Allow for inaccurate screen posn
Global igWinHeight.l = 660
Global igWinWidth.l = 720
Global sgTitle.s = "IdeasVacuum Image Viewer"
Global igTotalArgs.i = 0
Global igEsc.i = #False
Global igSlideShow.i = #False
Declare ShowImageBack()
Declare ShowImage()
Declare StartImage()
Declare ImageOpen()
Declare ImageSave()
Declare ImagePaste()
Declare ListImgFiles()
Declare ImageBack()
Declare ImageFwd()
Declare OpenWinMain()
Declare SetDelay(iUpDown.i)
Declare SlideShow()
Procedure ListImgFiles()
;-----------------------
Shared igImageTotal
Shared sgDefaultPath
Shared sgImage
Dim sPatNext.s(3)
sPatNext(0) = "*.jpg"
sPatNext(1) = "*.jpeg"
sPatNext(2) = "*.png"
sPatNext(3) = "*.bmp"
igImageTotal = 0
iCnt = 0
For iCnt = 0 To 3
If ExamineDirectory(#Folder, sgDefaultPath, sPatNext(iCnt))
While NextDirectoryEntry(#Folder)
igImageTotal + 1
sgImage(igImageTotal) = DirectoryEntryName(#Folder)
Wend
FinishDirectory(#Folder)
EndIf
Next
SortArray(sgImage(),#PB_Sort_Ascending | #PB_Sort_NoCase,0,igImageTotal)
igListDone = #True
EndProcedure
Procedure ShowImageBack()
;------------------------
iImageGdgtW.i = GadgetWidth(#ImageGdgt)
iImageGdgtH.i = GadgetHeight(#ImageGdgt)
SetGadgetState(#ImageGdgt,ImageBack)
EndProcedure
Procedure ShowImage()
;--------------------
iGdgPosnX.i = 0
iGdgPosnY.i = 35
iWinPosnX.i = 0
iWinPosnY.i = 0
sSize.s = Space(32)
If (igSlideShow = #False) : ShowImageBack() : EndIf
iImageHgt.i = ImageHeight(#Image)
iImageWdth.i = ImageWidth(#Image)
sSize = StrU(iImageWdth,#PB_Long) + " x " + StrU(iImageHgt,#PB_Long)
StatusBarText(#StatusBar, 1, sSize)
dImageRatio.d = (iImageHgt / iImageWdth)
If (iImageWdth > (igWinWidthMax - 5)) Or (iImageHgt > (igWinHeightMax - 80))
dScaledWidth.d = ((igWinWidthMax - 5) * dImageRatio)
dScaledHeight.d = ((igWinHeightMax - 80) * dImageRatio)
iImageWdth = Round(dScaledWidth, #PB_Round_Nearest)
iImageHgt = Round(dScaledHeight, #PB_Round_Nearest)
igImageGdgW = iImageWdth
igImageGdgH = iImageHgt
ResizeImage(#Image,iImageWdth,iImageHgt,#PB_Image_Smooth)
EndIf
If(igImageGdgW > iImageWdth)
iGdgPosnX = ((igImageGdgW - iImageWdth) / 2)
EndIf
If(igImageGdgH > iImageHgt)
iGdgPosnY = (((igImageGdgH - iImageHgt) / 2) + 35)
EndIf
If((igImageGdgW > igWinWidth) Or (igImageGdgH > igWinHeight))
iWinPosnX = ((igWinWidthMax - igImageGdgW) / 2)
iWinPosnY = ((igWinHeightMax - igImageGdgH) / 2)
iWinH.i = igImageGdgH + 80
If(iWinH > igWinHeightMax) : iWinH = igWinHeightMax : EndIf
iWinW.i = igImageGdgW
If(iWinW > igWinWidthMax) : iWinW = igWinWidthMax : EndIf
ResizeWindow(#WinMain,iWinPosnX,iWinPosnY,iWinW,iWinH)
ResizeGadget(#ImageGdgtDummy,#PB_Ignore,#PB_Ignore,igImageGdgW,igImageGdgH)
ResizeGadget(#BtnExit,(igImageGdgW -35),#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndIf
ResizeGadget(#ImageGdgt, iGdgPosnX, iGdgPosnY, iImageWdth, iImageHgt)
SetGadgetState(#ImageGdgt,ImageID(#Image))
SetWindowTitle(#WinMain, sgTitle + " " + sgDefaultPath)
If (igSlideShow = #False) : SetGadgetText(#StrFile, sgCurrImage) : EndIf
EndProcedure
Procedure StartImage()
;---------------------
Shared sgCurrImage
Shared sgDefaultPath
Shared sgImageFullPathOrg
; Args
sgImageFullPathOrg = ""
iTotalArgs = CountProgramParameters()
For i = 0 To iTotalArgs
sgImageFullPathOrg = sgImageFullPathOrg + ProgramParameter(i) + " "
Next i
If(Len(sgImageFullPathOrg) > 4)
sgImageFullPathOrg = RTrim(sgImageFullPathOrg)
If LoadImage(#Image,sgImageFullPathOrg)
sgDefaultPath = GetPathPart(sgImageFullPathOrg)
sgCurrImage = GetFilePart(sgImageFullPathOrg)
If(Len(sgCurrImage) > 0)
ShowImage()
EndIf
igListDone = #False
EndIf
EndIf
EndProcedure
Procedure ImageOpen()
;--------------------
Shared sgCurrImage
Shared sgDefaultPath
Shared sgImageFullPathOrg
;first opt in sgPat
sgImageFullPathOrg = OpenFileRequester("Select Image",sgDefaultPath,sgPat,0)
If(Len(sgImageFullPathOrg) > 0)
If LoadImage(#Image,sgImageFullPathOrg)
sgDefaultPath = GetPathPart(sgImageFullPathOrg)
sgCurrImage = GetFilePart(sgImageFullPathOrg)
If(Len(sgCurrImage) > 0)
ShowImage()
EndIf
igListDone = #False
EndIf
EndIf
EndProcedure
Procedure ImageSave()
;-------------------
sNameNoExt.s = Space(64)
sExt.s = Space(6)
sNewName.s = Space(1024)
sExt = GetExtensionPart(sgCurrImage)
sExt = "." + sExt
sNameNoExt = RemoveString(sgCurrImage,sExt,#PB_String_NoCase)
sImagePath.s = SaveFileRequester("Save Image",sgDefaultPath + sNameNoExt,sgSavePat,0)
If(Len(sImagePath) > 0)
;reload the original image to maintain original size
If LoadImage(#Image,sgImageFullPathOrg)
sPath.s = GetPathPart(sImagePath)
sName.s = GetFilePart(sImagePath)
sExt = GetExtensionPart(sName)
If(Len(sExt) > 0)
sExt = "." + sExt
sNameNoExt = RemoveString(sName,sExt,#PB_String_NoCase)
Else
sNameNoExt = sName
EndIf
iIndex.i = SelectedFilePattern()
Select iIndex
Case 0: sNewName = sPath + sNameNoExt + ".png"
SaveImage(#Image,sNewName,#PB_ImagePlugin_PNG)
Case 1: sNewName = sPath + sNameNoExt + ".jpg"
SaveImage(#Image,sNewName,#PB_ImagePlugin_JPEG)
Case 2: sNewName = sPath + sNameNoExt + ".bmp"
SaveImage(#Image,sNewName,#PB_ImagePlugin_BMP)
EndSelect
SetGadgetText(#StrFile, sNewName)
EndIf
igListDone = #False
EndIf
EndProcedure
Procedure ImagePaste()
;--------------------
Shared sgImageFullPathOrg
iGetOK = GetClipboardImage(#Image,32)
If(iGetOK > 0)
; Save TempCopy of image for later use
sgImageFullPathOrg = "C:\temp\TempClip.png"
SaveImage(#Image,sgImageFullPathOrg,#PB_ImagePlugin_PNG)
ShowImage()
igListDone = #False
EndIf
EndProcedure
Procedure ImageBack()
;-------------------
Shared sgCurrImage
Shared sgImageFullPathOrg
Shared sgDefaultPath
iImageCnt = 1
sgDefaultPath = GetPathPart(sgImageFullPathOrg)
If(igListDone = #False) : ListImgFiles() : EndIf
For iImageCnt = 1 To igImageTotal Step 1
If ( (UCase(sgImage(iImageCnt))) = (UCase(sgCurrImage)) )
If(iImageCnt > 1)
sgCurrImage = sgImage(iImageCnt - 1)
sgImageFullPathOrg = sgDefaultPath + sgCurrImage
If LoadImage(#Image,sgImageFullPathOrg)
ShowImage()
EndIf
EndIf
Break
EndIf
Next
EndProcedure
Procedure ImageFwd()
;-------------------
Shared sgCurrImage
Shared sgImageFullPathOrg
Shared sgDefaultPath
iImageTotal = 0
iImageCnt = 0
sgDefaultPath = GetPathPart(sgImageFullPathOrg)
If(igListDone = #False) : ListImgFiles() : EndIf
For iImageCnt = 1 To igImageTotal Step 1
If ( (UCase(sgImage(iImageCnt))) = (UCase(sgCurrImage)) )
If( ((iImageCnt + 1) < igImageTotal) Or ((iImageCnt + 1) = igImageTotal) )
sgCurrImage = sgImage(iImageCnt + 1)
sgImageFullPathOrg = sgDefaultPath + sgCurrImage
If LoadImage(#Image,sgImageFullPathOrg)
ShowImage()
EndIf
EndIf
Break
EndIf
Next
EndProcedure
Procedure SlideShow()
;--------------------
Shared sgCurrImage
Shared igEsc
Shared igShowBack
iImageCnt.i = 0
iGdgID.i = 0
igEsc = #False
SetGadgetText(#StrFile, "Hit ESC Key to stop Slide Show")
sDelay.s = GetGadgetText(#StrDelay)
iDelay.i = Val(sDelay)
While WindowEvent() : Wend
ListImgFiles()
sgCurrImage = sgImage(1)
igSlideShow = #True
While (igEsc = #False)
iImageCnt + 1
ImageFwd()
If (iImageCnt = igImageTotal)
sgCurrImage = sgImage(1)
iImageCnt = 1
EndIf
Delay(iDelay)
igEsc = GetAsyncKeyState_(#VK_ESCAPE)
If WindowEvent() = #PB_Event_Gadget
If(EventGadget() = #BtnExit) : igEsc = #True : End : EndIf
EndIf
Wend
igEsc = #True
igSlideShow = #False
EndProcedure
Procedure OpenWinMain()
;----------------------
If OpenWindow(#WinMain, 0, 0, igWinWidth, igWinHeight, sgTitle, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
WindowBounds(#WinMain,igWinWidth,igWinHeight,igWinWidthMax,igWinHeightMax)
ImageGadget(#ImageGdgtDummy,igImageGdgX,igImageGdgY,igImageGdgW,igImageGdgH,0,#PB_Image_Border)
ImageGadget(#ImageGdgt,igImageGdgX,igImageGdgY,igImageGdgW,igImageGdgH,0)
ButtonImageGadget(#BtnFileOpen, 0, 0, 34, 34, Btn01)
GadgetToolTip(#BtnFileOpen, "Open")
ButtonImageGadget(#BtnSave, 34, 0, 34, 34, Btn02)
GadgetToolTip(#BtnSave, "Save As")
ButtonImageGadget(#BtnCopy, 68, 0, 34, 34, Btn03)
GadgetToolTip(#BtnCopy, "Copy to Clipboard")
ButtonImageGadget(#BtnPaste, 102, 0, 34, 34, Btn04)
GadgetToolTip(#BtnPaste, "Paste from Clipboard")
ButtonImageGadget(#BtnBack, 136, 0, 34, 34, Btn05)
GadgetToolTip(#BtnBack, "Previous Image")
ButtonImageGadget(#BtnFwd, 170, 0, 34, 34, Btn06)
GadgetToolTip(#BtnFwd, "Next Image")
ButtonImageGadget(#BtnSld, 204, 0, 34, 34, Btn07)
GadgetToolTip(#BtnSld, "Slide Show (ESC key to stop)")
SpinGadget(#StrDelay, 240, 6, 50, 22, 1, 5000, #PB_Spin_Numeric)
GadgetToolTip(#StrDelay, "Slide Display Interval")
SetGadgetState(#StrDelay, 250)
SetGadgetFont(#StrDelay, FontID1)
StringGadget(#StrFile, 300, 6, 350, 22, "", #PB_String_BorderLess)
GadgetToolTip(#StrFile, "File Path")
SetGadgetFont(#StrFile, FontID1)
ButtonGadget(#BtnExit, (igWinWidth - 34), 0, 34, 34, "Exit")
GadgetToolTip(#BtnExit, "Exit Viewer")
CreateStatusBar(#StatusBar, WindowID(#WinMain))
AddStatusBarField(600) ;0 General Messages
AddStatusBarField(#PB_Ignore) ;1 Image Size
StatusBarText(#StatusBar, 0, " ")
StatusBarText(#StatusBar, 1, " ")
EndIf
EndProcedure
;#### MAIN
OpenWinMain()
StartImage()
;Event loop
Repeat
iEvent.i = WaitWindowEvent(1)
Select iEvent
Case #PB_Event_Gadget
iGdgID = EventGadget()
Select iGdgID
Case #BtnExit: iEvent = #PB_Event_CloseWindow : Break
Case #BtnFileOpen: ImageOpen()
Case #BtnSave: ImageSave()
Case #BtnCopy: SetClipboardImage(#Image)
Case #BtnPaste: ImagePaste()
Case #BtnBack: ImageBack()
Case #BtnFwd: ImageFwd()
Case #BtnSld: SlideShow()
EndSelect
EndSelect
Until iEvent = #PB_Event_CloseWindow
End
DataSection
Btn01:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1C0000001C000000,$DF0D720000000608,$5948700900000094
Data.q $0E0000C40E000073,$00001B0E2B9501C4,$DB07454D49740700,$E3896122020E1302,$5845740700000031
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $03000027D2EEA800,$B5894854414449C5,$F1C01845148C4BD6,$2807D9AFB0F4F57F,$8828C14411021091
Data.q $0920F41E0F071F11,$4A307BAC7C4C47C1,$485D96DC09283C42,$842682F1A36068BC,$D1204227BB03C68B
Data.q $A084C44C0F8B9660,$4F7479975DC5C182,$7F75774CCF774F77,$8CBBB0A2CCC8601E,$FA97EAABAA5DF25F
Data.q $613161112B5775F2,$283819F91171C618,$270591142F79E522,$37B7ABB48C32A6F0,$E606001C0FA698CE
Data.q $AD34C640D81176B5,$832DB613A6773B6D,$FDE035CB95D22323,$70D81BA040A2FF40,$68B2D977A4752A53
Data.q $6B5272D6A4E4B2DC,$06BEDF63792CB719,$668105BE8046015C,$64A52A6E64065D46,$563CE6B037A3D1CF
Data.q $D3D9D2C3C3EBC92A,$DE818603D34C6713,$4A528D357FD57DE6,$000C8FB3C35C183E,$F75D12F07ABC0A90
Data.q $C2FB2DE4E4D0E66E,$1B1898C6C7C61C77,$810FEB44C28A3AD3,$A55920E637C4458F,$AED6014FA94A5BD4
Data.q $E5D65B1CBACB64E8,$EF3AA5D30AB7FEF8,$0C0DCC46DB7C3E1D,$994D4C5F3F7FB430,$35D5D1D7DBDDECAF
Data.q $636ED4A569CD319A,$D1ECFA86328FDCCE,$EFA73EB63F6F3DB5,$BF8662779002CBEE,$E37AB377F785E69C
Data.q $194BA5E03782DBC6,$8998CE674380703A,$591DA4A5AE40FDD6,$BE8E56AB8BCF6663,$7C8BA1E0E165BAB6
Data.q $E8E817F3E1CB397B,$3B1DD188D8379EEE,$BC71D15D4EA7B392,$6962BDD0207E6CC1,$9ABE5C5FE9F265B6
Data.q $87EC28B13132302C,$F00CF1F8EEF82713,$7112DA4B7344888E,$7B6E4F14F9FBBC22,$D516305F6FB6A79E
Data.q $8E30CA176BB27C6A,$D35830CA00D7C889,$697D9FDE5F1E3599,$337BEBADE5F65F79,$2989C1783B5DF577
Data.q $CD99803FF7559A78,$8F3E728B7FF372DE,$675FB9C945122C53,$A8CCD371930DCB42,$DFEE1E67E6CA9D2E
Data.q $BFAEE799FD43F4F4,$C40C450280220006,$FE9F8E407245060B,$389E29CE737D37F0,$840F80D815345F6B
Data.q $4C4B2CDEB2C1A69D,$0C571D156FCDE0B5,$06851DB7FF943195,$354ABC4C372C0450,$370152C56D26AFC1
Data.q $6A34508AE26178D0,$55EBB45765802A51,$71A84AC17B5AFC13,$746C500ED02704C3,$A96813AE46E0A969
Data.q $340DC1355E84F9B4,$CE2C034280762F25,$6E83769AF8EB9158,$CA8ED66F53D41098,$FC1396A71EA160CD
Data.q $57F389ABF1A0600F,$945A800D57036EA9,$DB0BD4EBECB1405A,$200500E26178260D,$2F16BEDA29A5FCDF
Data.q $6813A06DB4E3D4D4,$AD28B5F2065C7ECA,$241B8B12BB058336,$B8293BAD77AB2B6D,$25F30668055C0DB1
Data.q $75655DA128C34E2F,$06C8AC666BED8D02,$2D612A7A83026F66,$AAC674E372582B6D,$4820EA516B026E97
Data.q $A13026DD43714A2D,$D4B4A2D6CC02C5E4,$41B827A8348F5E02,$31B00DF5F6584E7B,$C97B3F9CA7017AD6
Data.q $CADF7512C0CF7ADF,$9FC2BDFC7F063BCE,$CB58C6A984497AF9,$8EA18C89EA52862F,$C6376771A683C528
Data.q $70250E9C74675DF5,$8E63007F8052445A,$00005B4B3A1D52D6,$42AE444E45490000,$0000000000008260
EndDataSection
DataSection
Btn07:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1B0000001A000000,$9F16620000000608,$594870090000006B
Data.q $0E00004D0E000073,$00000968D546014D,$DB07454D49740700,$FA17BA122E0F1B02,$58457407000000EB
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $03000027D2EEA800,$CD8948544144490E,$9FC61C656C4BCF96,$70C2C7E7347AFDE7,$4ACC3F6F01CC5C6E
Data.q $A1A37442CC2D68DC,$82ED180C235936A4,$08828203FA289B4B,$15245D303041768A,$DD2B994831FA52D2
Data.q $2355B57236957198,$6D3CE73339649177,$F536999CF7932E12,$03E1E7EF9EF17785,$C001241240F0E2EF
Data.q $800EA3DC5E4F0035,$0C7C19DC24ACBD6C,$1BF453AA1E00AFC0,$031D99922B7FB180,$F739DCF2482A2FB8
Data.q $D3350E447A818007,$9921BECCD57ADADA,$8B78F1E30CD5DDA8,$9FF608C1F2457D99,$11EC58B163264CA2
Data.q $E8F0B0A6C90ADCE7,$5666123A3A3B28E8,$4499325121A57924,$648A7BCF3CF3972E,$5EB366C8666C2C3E
Data.q $24D7DCE755DB5B5B,$1DBDBDA0008B75E3,$9205EE739E737373,$CB905A5A5AC984EF,$FB9CE3D62C58BCE5
Data.q $3A0008A970AF6EFC,$EBE48C64C9913B3B,$66857EFEC987AF24,$224349F9269EF3CF,$38F8F8C6EEEEE800
Data.q $953630F9F24FBE49,$97B9CE7ACD9B214A,$FBFA000890DDBE48,$4A7E48E4343431FB,$66634E9D363099F2
Data.q $86D5F249BE48C666,$BEBE8C3C3C300044,$30F1F2417DCE733E,$2463636307A7A7B6,$3000448699C901F9
Data.q $31EEBABABAE93939,$0C0EC61FDE496FB3,$41BC91D07070600C,$CECECC491121A872,$18ACCD7BA952A536
Data.q $D7B7B7A08C8C8FC5,$116EB47C925F739C,$CF69E9E9879E7800,$313F14592587FDF7,$3E00E39B9B9AE131
Data.q $BCBCB054A954486E,$FC51FA499FB3315C,$077F972E506AEAEA,$5858584922DD4AF0,$8FEFBEDBA54A96A8
Data.q $7B7B7B1162C5F144,$2DD66E92E304107E,$FF0F0F0E0959595A,$EC612FD2547F7DF4,$4902B6B6B636F6F6
Data.q $9A7F420001FA4A2F,$5DDDDD81B1B1B317,$F7630A7E92B3D25F,$D7492EBEBEB1F7F7,$ECED148F7C5F2D25
Data.q $95949033737360EC,$A58474747B187DF4,$BA3E92BBD25F25A5,$DAC038383A2A1773,$8C316926BD249ADA
Data.q $20D50A14284A952D,$577F76AB7A486E08,$7D17171631F1F1D1,$7A724C30FA49EF49,$AB56A95F3E7C8A7A
Data.q $D152E632F97A49DF,$082542850A09C9C9,$3F392611BD24CF82,$9D9D9CAF9F3E473F,$4BD54939E0820CDD
Data.q $64AF3F3F30CEDAC1,$85340115CE765932,$E9D294D4D4F28674,$50D2B8016ECCD974,$11FB335512244939
Data.q $64C993949CA22240,$69BFF03C01B76660,$89E006BBAF49FF41,$3900BFD5360D83BA,$007935F1C2FDF1BD
Data.q $AE444E4549000000,$0000000000826042
EndDataSection
DataSection
Btn06:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1C0000001B000000,$C4D1900000000608,$59487009000000ED
Data.q $0E00004D0E000073,$00000968D546014D,$DB07454D49740700,$BD6F9B09040E1302,$58457407000000F7
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $02000027D2EEA800,$B58948544144491D,$F0071C7112A831D6,$B68A4D2D777FEFEF,$E10818919A04B448
Data.q $883509E4845C3E64,$441ED5B414D6D4D4,$F252D0822D0E6E7B,$1C4449C21C29A45C,$7489D7A74A6F296A
Data.q $7BDE38BE436FFF77,$F9FC70707EF4E4BD,$03F1FBBBFF03FFDE,$7675BC780172EC49,$6564DB3B8031D80F
Data.q $A94AB94A52E840F3,$30B8FE48B7FBEFA5,$A515E484A7F493BB,$607DBF70B9113BD4,$C0114618624A9528
Data.q $BD7A893264B1C8AB,$2910791133C88A6E,$5162C5166CD90006,$1979C6E4456F5294,$2C2B0C30C5F52953
Data.q $982A54AFB938D242,$E4441FDB6D96E7CF,$9F30005660E3C936,$C990F5864C9923CF,$D5AB0001C78F1064
Data.q $48E71C75CB56AD0A,$A40D1A35833F5D6B,$1B6DB2E9D8D0E9D3,$F920BF5AD7DB76ED,$2A560B3BDBD9A3F7
Data.q $A5E444355AB54295,$50A140018A441C88,$1ABBFFE6C3972E40,$12254D5AB5000629,$297222F7A94ACB89
Data.q $CB4D9B340C30CC52,$0C5226F2229BACB2,$3CF3CC5237BD8200,$C909DD75D71D3A74,$162F4F5EBD629127
Data.q $1997F2487D6B470B,$418F1E308D1A3415,$68C74440EFC93EF2,$39F24FBEFDFA36DB,$66CC0026EB278FC9
Data.q $DB079BD0CB972C33,$C92E3A74E838E395,$BE44530000F760A3,$DE79E9C7D093264E,$920E3C78862C58B5
Data.q $46FEBD7ADEBB76E8,$1EBEB5A9ACE9E1F2,$00C00794A5000216,$6AEE7CF98060C180,$05DB0679FC91EFAD
Data.q $243870C53A74D60A,$9D7686E767244780,$2CB4CB972BC444AE,$DBCAE9EA3AF005CB,$EA4977D6B49F3A0C
Data.q $DF7C2DCA35F7657F,$BEFB5C91CA3E45CF,$A780182F683FF87F,$C41E0DFC136F3F24,$0000F095B85717CE
Data.q $42AE444E45490000,$0000000000008260
EndDataSection
DataSection
Btn02:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1C0000001A000000,$AF137F0000000608,$59487009000000D3
Data.q $0E00004D0E000073,$00000968D546014D,$DB07454D49740700,$E2950F23030E1302,$58457407000000E6
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $01000027D2EEA800,$ED89485441444954,$F1C71C41024AC1D5,$0B41E1AECBBACCEF,$F49BA127460E9617
Data.q $EAF40DEAC780BE0A,$2E97A0F37823E973,$85232D882329E09B,$56B5B083A7765DB4,$330E60FE210BAD84
Data.q $8011FFFE6181F30C,$52946D275D7453E2,$218610025290A528,$DC90C14192D38039,$8D1A3427C74A02CD
Data.q $DA5D75C1D3A75054,$BBB76E88D1A336ED,$AF786964A4860A82,$054F5EBD4CB97621,$1C71C5D75C7DFBF5
Data.q $D5A559415803CF3C,$6DB206C88420016A,$74C6A1D9C982A39B,$01016644B0FD7211,$D683B200D58A4008
Data.q $34752F9C50F687B3,$E87548BCBAB80E18,$09342D12A9866CCB,$C7CB047EF2340F95,$565E4B9980659054
Data.q $854B53451A9A2A02,$C441AF0C7F1D94FC,$4B18FF09FC997EF0,$820290F7D63B9C17,$D5AB50A952A67368
Data.q $94FCFE63D7AF79E2,$D2AD5AA26F95B3D8,$66E63C78F9E3366C,$3FFE87B0C7BDDA0D,$A87E0011FB980394
Data.q $16DE0D82E372EBC8,$A98FA10B1FB7264C,$56C05B3E308BA64B,$679D810779AFC11A,$000000C2893C430A
Data.q $6042AE444E454900,$0000000000000082
EndDataSection
DataSection
ImageBack:
Data.q $0A1A0A0D474E5089,$524448490D000000,$0003000000040000,$8774800000000301,$544C50060000004E
Data.q $7C000000E3DFE045,$700900000013A44C,$0000000000735948,$A41665EA01000000,$5441444976000000
Data.q $00000101C1ED9C78,$40486EAFFF208200,$0000000000000001,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000
Data.q $0000000000000000,$0000000000000000,$0000000000000000,$0000000000000000,$66B501000F8306EF
Data.q $45490000000084E4,$0000826042AE444E
EndDataSection
DataSection
Btn04:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1C00000016000000,$4F2F650000000608,$594870090000005D
Data.q $0E00004D0E000073,$00000968D546014D,$DB07454D49740700,$8E4D3D0F030E1302,$5845740700000005
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $01000027D2EEA800,$ED894854414449A7,$BF8614515B483195,$84241441E69E137B,$4B8268F89E1C4A42
Data.q $844194EA9050E0D1,$0732420947104208,$1C4411264B828767,$F4B245AED110759C,$B828A2088D1AD909
Data.q $41DB9797D460E0E8,$7E4A9C5126926AD3,$1CF738FFF739CB38,$0358028D14A517B8,$4169B9F334CC5554
Data.q $C80498B163946186,$69EA6A54A94E3264,$061C38557AF5EC09,$0B05D4F15AA94A40,$AEA8D027A180E621
Data.q $DB653C78F352B2EB,$75A94FAF884213B6,$5C0CB0061A8FD4A5,$30C85F3E7CA7E556,$F8A34688BAEBA50C
Data.q $6CD93CF9F2007EFD,$B6C3972E438E3956,$3C141FCABF605DED,$7CBE3FBF5050832E,$891125DB6174A4D0
Data.q $4A9BAF0D12244844,$45CB972A2BBBB8A5,$9FC87B41F7D0ECB9,$9FF39B563A5476DD,$5D98E64818780FE8
Data.q $1393EB83636F645C,$918B2CB6086CD34C,$9A74D58850DE9C78,$F9322F3C399F4B5F,$B8E3E3C3C676A0ED
Data.q $7C02843565828D35,$0817C69E9B190609,$DE5DD5A8BF4E9AB0,$85E75CFA14D93244,$6A2EF739D64E4D42
Data.q $3FFE0DB836E0DB83,$5D0ACACEF1EF35C1,$FD5D5CDC82AF3D3D,$4E6ECD0649A9DC1B,$6ECD0641A5BFAFBF
Data.q $EF6C037003BFB53A,$DF1FE2164877A35F,$CFD6C8A2E8E8AD04,$DFADEFD2FCFFEEC7,$C1330EBD64A6FC4C
Data.q $444E454900000000,$00000000826042AE
EndDataSection
DataSection
Btn03:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1C0000001B000000,$C4D1900000000608,$59487009000000ED
Data.q $0E00004D0E000073,$00000968D546014D,$DB07454D49740700,$7BE5723A020E1302,$5845740700000067
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $01000027D2EEA800,$ED89485441444906,$F1C01450C26ABDD6,$5B839339D4B70E7F,$A2EB7364A543A5C1
Data.q $5DE6807C19F16BA3,$5A6E66082109792C,$A08A10411176334A,$9BB43A436A543343,$81C0F7A5D0DCC3E6
Data.q $0E70B85C7F70E70B,$A69A43C88A575A40,$BB2E5D75B802A564,$4C9C798F1FC2745D,$7074E8B8028F5E54
Data.q $1EC2820A2C2D3D7A,$C47F67DC8C4E12D1,$773E8BA97DFB5F31,$BB095D965965003B,$6FD852C30D79F7EB
Data.q $70CDC0184A9B015C,$28883C053A3460C8,$366ECC62DD77B808,$812E5EB6168E3B69,$0CC198330620FE3F
Data.q $D997802984FFB066,$326FBE283DBB788C,$CF5356444C356E87,$894DBAB1DE7A9B3B,$5595A4924B1A5E69
Data.q $B0DAEB819E346F3C,$D7DF2782C5B786A2,$975BC873F451E642,$251BFCF5C6A42445,$00AC2A2F58838A22
Data.q $AE444E4549000000,$0000000000826042
EndDataSection
DataSection
Btn05:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1C0000001B000000,$C4D1900000000608,$59487009000000ED
Data.q $0E00004D0E000073,$00000968D546014D,$DB07454D49740700,$5741FB35030E1302,$58457407000000B7
Data.q $00726F6874754174,$0C00000048CCAEA9,$6373654474584574,$006E6F6974706972,$0A00000023210913
Data.q $79706F4374584574,$0FAC007468676972,$45740E0000003ACC,$6974616572437458,$00656D6974206E6F
Data.q $09000000090FF735,$74666F5374584574,$FF705D0065726177,$5845740B0000003A,$69616C6373694474
Data.q $8FB4C0B70072656D,$7458457408000000,$00676E696E726157,$0700000087E61BC0,$72756F5374584574
Data.q $00EB83FFF5006563,$4374584574080000,$F600746E656D6D6F,$7406000000BF96CC,$656C746954745845
Data.q $01000027D2EEA800,$BD894854414449FE,$F007147152A83FD6,$0C5A506BFBBF39EF,$9E5C9C255A8FBC5B
Data.q $422123E190E8222E,$1B9A0A6ADB268727,$C328691726E6E682,$7F918922D20537C9,$DD044797149710C6
Data.q $EF4F8782DCB4EFEE,$CE3FBA6FC0EDEBC5,$208881C3BF039EE7,$399DDDE828F001C8,$E462C22E00A74202
Data.q $BF9993744419DB25,$F65EF7A318C24888,$9005BF331481F609,$4A54BC00C204830C,$ED66063A050A169D
Data.q $AD69E8890F4440FA,$32B2B8D0756DF356,$872E5C9BF3334A22,$32A2B808147D3A74,$B6DB60FA94AEBA22
Data.q $962227DAFF4A952E,$CEBAEB90A1DBFAD6,$BF1E3C5DF9988B56,$0003162C74B56ADB,$1D43B366CC1B366C
Data.q $95CBA3468C2B56AC,$D7AF57BE6633D111,$F204891200085FD5,$8CBF3E7CD8C1FCF9,$152A545E88895111
Data.q $9617DE270752A54E,$20C9932773309D07,$D11300010246CD9B,$D5E3264C9F7E6635,$BC00C385DDEFD56A
Data.q $295A1A3469DF5AD6,$3D8E8E413BE5A515,$5C76DDBB6BE71C76,$98C65F9113168DD7,$9AEDDBA3FD7AF5B3
Data.q $E631859110003148,$168C3870C63C78C1,$F5EBDE791173C0F3,$C75FF6091972E5DC,$6DB6CFE20DE616D5
Data.q $326111169B366ADF,$50ACB2C0E9D3A099,$1105C88BEA6B7883,$ABEFDFB0C58B1755,$1C76FC4FDE4CB972
Data.q $899DE3B018A1F6E7,$98060C1CD318D4C8,$B7DE256FF261A74E,$5162C53B5AD2BD55,$98A003957489C888
Data.q $568160639B3323F9,$D2237318D8D4A539,$EF75D777F36BCE55,$03CC205030CFC88B,$A603FB161278013F
Data.q $009AFC5D8788EBC0,$AE444E4549000000,$0000000000826042
EndDataSection
IdeasVacuum
If it sounds simple, you have not grasped the complexity.
If it sounds simple, you have not grasped the complexity.