-Lire le contenu d'un fichier compressé composé d'images exclusivement (png, jpeg, tga).
-Afficher une liste d'images dans un ListviewGadget
-Sélectionner le nom d'une image depuis la liste proposée et l'afficher dans un canvas
Code : Tout sélectionner
EnableExplicit
Enumeration
#ZipFile
#Mainform
#ListImg
#Canvas
#Image
EndEnumeration
Define.l Event, GEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered
Global ZipFile.s
Procedure ShowZipContent()
Protected PackEntryName.s
ZipFile = OpenFileRequester("Open file ...","", "zip files|*.zip", 0)
If ZipFile <> ""
OpenPack(#ZipFile, ZipFile, #PB_PackerPlugin_Zip)
If ExaminePack(#ZipFile)
While NextPackEntry(#ZipFile)
PackEntryName = PackEntryName(#ZipFile)
Select PackEntryType(#ZipFile)
Case #PB_Packer_File
AddGadgetItem(#ListImg, -1, PackEntryName)
EndSelect
Wend
EndIf
EndIf
ClosePack(#ZipFile)
EndProcedure
Procedure ShowImage(ImageName.s)
Protected PackEntryName.s, ImageSize.i, *Image
OpenPack(#ZipFile, ZipFile, #PB_PackerPlugin_Zip)
; Search entry name
If ExaminePack(#ZipFile)
While NextPackEntry(#ZipFile)
PackEntryName = PackEntryName(#ZipFile)
Select PackEntryType(#ZipFile)
Case #PB_Packer_File
If PackEntryName = ImageName
;Uncompress PackEntryName in memory
ImageSize = PackEntrySize(#ZipFile)
*Image = AllocateMemory(ImageSize)
UncompressPackMemory(#ZipFile, *Image, ImageSize)
EndIf
EndSelect
Wend
EndIf
ClosePack(#ZipFile)
; Show image
CatchImage(#Image, *Image, ImageSize)
StartDrawing(CanvasOutput(#Canvas))
DrawingMode(#PB_2DDrawing_Default)
Box(0, 0, 370, 350) ;Canvas Clear
DrawImage(ImageID(#Image), 0, 0)
StopDrawing()
FreeMemory(*Image)
EndProcedure
Procedure Open_MainForm()
OpenWindow(#Mainform, 0, 0, 600, 400, "Unpack image in memory", WindowStyle)
ListViewGadget(#ListImg, 10, 10, 200, 350)
CanvasGadget(#Canvas, 220, 10, 370, 350)
EndProcedure
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseZipPacker()
Open_MainForm()
ShowZipContent()
Repeat
Event = WaitWindowEvent(10)
GEvent = EventGadget()
Select Event
Case #PB_Event_Gadget
Select GEvent
Case #ListImg
ShowImage(GetGadgetItemText(#ListImg, GetGadgetState(#ListImg)))
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver