Page 4 of 6
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:09 pm
by JHPJHP
Thunder93 your Structure works great, but so did all the others... moob is using PureBasic 32bit; we also had partial success when he compressed a text file - so the problems now are just confusing?
Did you test the file he posted... what were your results?
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:12 pm
by Thunder93
moob said he is using external zlib.dll ?
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:14 pm
by moob
JHPJHP wrote:Thunder93 your Structure works great, but so did all the other ones... moob is using PureBasic 32bit; we also had partial success when he compressed a text file - so the problems now are confusing?
the version of zlib in PB 5.00 is the same of PB 5.20???
this code here in multi examples you have post work with any version of zlib???
the problem is not because this code only work with last version of zlib and not work with old zlib version on PB 5.00.
I don't know i try figure out what happens
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:15 pm
by moob
Thunder93 wrote:moob said he is using external zlib.dll ?
No not now, I have test with external zlib.dll too and not work either
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:20 pm
by Thunder93
zlib 1.2.8 - April 28, 2013 release
Version 5.20 of PB included then the updated / latest zlib
17 September 2013 : Version 5.20
- Updated: zlib to 1.2.8
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:22 pm
by moob
Thunder93 wrote:zlib 1.2.8 - April 28, 2013 release
Version 5.20 of PB included then the updated / latest zlib
17 September 2013 : Version 5.20
- Updated: zlib to 1.2.8
How can I see the version of zlib in PB 5.00??
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:33 pm
by Thunder93
Zlib version info use the following...
Code: Select all
#ENABLE_GZIP = 16
#Z_NULL = 0
#ZLIB_VERSION = "1.2.8"
#Z_FINISH = 4
#Z_DEFAULT_COMPRESSION = -1
#Z_DEFLATED = 8
#MAX_MEM_LEVEL = 9
#Z_DEFAULT_STRATEGY = 0
Structure Z_STREAM
*next_in.Byte
avail_in.l
total_in.l
*next_out.Byte
avail_out.l
total_out.l
*msg.Byte
*state
zalloc.l
zfree.l
opaque.l
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
PB_Alignment1.b[4]
CompilerEndIf
data_type.i
adler.l
reserved.l
CompilerIf #PB_Compiler_Processor = #PB_Processor_x64
PB_Alignment2.b[8]
CompilerEndIf
EndStructure
ImportC "zlib.lib"
zlibVersion()
inflateInit2_(*strm, windowBits.i, Version.s, strm_size)
inflate(*strm, flush.i)
inflateEnd(*strm)
deflateInit2_(*strm, level.i, method.i, windowBits.i, memlevel.i, strategy.i, Version.s, strm_size)
deflateBound(*strm, sourceLen)
deflate(*strm, flush.i)
deflateEnd(*strm)
EndImport
#ZLIB_OK = 0
#ZLIB_VERSION_ERROR = -6
Procedure.s ZLIB_Version()
VersionBuffer.i = zlibVersion()
If VersionBuffer <> #Null
Version.s = Space(32)
Version = PeekS(VersionBuffer, 32, #PB_Ascii)
ZLIB_LAST_ERROR = #ZLIB_OK
Else
Version = ""
ZLIB_LAST_ERROR = #ZLIB_VERSION_ERROR
EndIf
ProcedureReturn Version
EndProcedure
Debug "Zlib Version: "+ZLIB_Version()
Procedure InflatePayload(*Payload, windowBits.i)
LengthToRead = MemorySize(*Payload)
LengthToWrite = FileSize("test.dds")
*Output = AllocateMemory(LengthToWrite)
strm.Z_STREAM
strm\next_in = *Payload
strm\avail_in = LengthToRead
strm\next_out = *Output
strm\avail_out = LengthToWrite
strm\zalloc = #Z_NULL
strm\zfree = #Z_NULL
strm\opaque = #Z_NULL
inflateInit2_(@strm, windowBits, #ZLIB_VERSION, SizeOf(Z_STREAM))
inflate(@strm, #Z_FINISH)
inflateEnd(@strm)
ProcedureReturn *Output
EndProcedure
Procedure DeflatePayload(*Input, windowBits.i)
LengthToRead = MemorySize(*Input)
strm.Z_STREAM
strm\next_in = *Input
strm\avail_in = LengthToRead
strm\zalloc = #Z_NULL
strm\zfree = #Z_NULL
strm\opaque = #Z_NULL
deflateInit2_(@strm, #Z_DEFAULT_COMPRESSION, #Z_DEFLATED, windowBits, #MAX_MEM_LEVEL, #Z_DEFAULT_STRATEGY, #ZLIB_VERSION, SizeOf(Z_STREAM))
LengthToWrite = deflateBound(@strm, LengthToRead) / 2
*Payload = AllocateMemory(LengthToWrite)
strm\next_out = *Payload
strm\avail_out = LengthToWrite
deflate(@strm, #Z_FINISH)
deflateEnd(@strm)
ProcedureReturn *Payload
EndProcedure
If OpenFile(0, "test.dds")
LengthToRead = FileSize("test.dds")
*Input = AllocateMemory(LengthToRead)
ReadData(0, *Input, LengthToRead)
CloseFile(0)
*Payload = DeflatePayload(*Input, 15 | #ENABLE_GZIP)
If CreateFile(0, "test.gz")
WriteData(0, *Payload, MemorySize(*Payload))
CloseFile(0)
EndIf
FreeMemory(*Payload)
EndIf
If OpenFile(0, "test.gz")
LengthToRead = FileSize("test.gz")
*Payload = AllocateMemory(LengthToRead)
ReadData(0, *Payload, LengthToRead)
CloseFile(0)
*Output = InflatePayload(*Payload, 15 | #ENABLE_GZIP)
If CreateFile(0, "test2.dds")
WriteData(0, *Output, MemorySize(*Output))
CloseFile(0)
EndIf
FreeMemory(*Output)
FreeMemory(*Payload)
EndIf
moob wrote:Thunder93 wrote:zlib 1.2.8 - April 28, 2013 release
Version 5.20 of PB included then the updated / latest zlib
17 September 2013 : Version 5.20
- Updated: zlib to 1.2.8
How can I see the version of zlib in PB 5.00??
Re: How to compress with zlib
Posted: Sun Oct 20, 2013 9:35 pm
by Thunder93
Yea, his version was corrupted.
JHPJHP wrote:Did you test the file he posted... what were your results?
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 12:13 am
by Thunder93
Code: Select all
LengthToWrite = deflateBound(@strm, LengthToRead) / 2
This isn't right.. It won't work well with larger files, perfectly fine for smaller ones.
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 12:48 am
by moob
I think the version zlib of PB 5.00 is 1.2.5 or 1.2.6 or more older
Not version 1.2.8
has you can see here
http://zlib.net/ChangeLog.txt
'#ZLIB_VERSION = "1.2.8"' this in the code is not the problem? since the version of PB 5.00 is 1.2.5 or 1.2.6 or more older???
the functions are diferent in old version??
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 1:29 am
by skywalk
Hi moob, purebasic v5.2 zlib version = 1.28.
Install the latest purebasic version in a separate directory and compile the supplied compress/decompress code as a dll.
Then call it from your older v5 pb code.
Or just modify your v5 wrapper code to work with v5.2.
There are not a lot of syntactical differences from v5 to v5.2.
Mainly, change *ptr.datatype to *ptr_datatype within your prototypes and procedures.
Any other errors will pop up and you can post them if you need help.
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 5:07 am
by JHPJHP
Hi moob,
Updated Code
- zlib1.dll included
- MD5 Fingerprint Hash comparison included
- original Structure restored (I believe the DLL is 32bit only)
- unzip folder
-- run: test.pb (debug mode)
Note:
LengthToWrite = DeflateBound(@strm, LengthToRead) / 20
- this setting is for testing only, you may need to modify it for your production code to work
-- check files for data loss
There is a dll version (decompression) near the top of the thread that can be modified for compression, but if you want to post some code - I'll have a look... I'm on PB 5.20 though; not sure if it's using the same zlib library?
- notice that I set the compressed size with: LengthToWrite = deflateBound(@strm, LengthToRead) / 2
-- not sure why delatebound is not optimizing compression - thus the reason for "dividing by two" (modify to whatever works)
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 7:49 am
by moob
JHPJHP wrote:Hi moob,
Please try the following - it's a DLL version of the code:
https://www.dropbox.com/s/c13ycz7n4fxa923/ZLib-DLL.zip
- unzip folder
- zlib1.dll included
- original Structure restored (I believe the DLL is 32bit only)
- run: test.pb
Note:
LengthToWrite = DeflateBound(@strm, LengthToRead) / 20
- this setting is for testing only, you may need to modify it for your production code to work
-- check files for data loss
There is a dll version (decompression) near the top of the thread that can be modified for compression, but if you want to post some code - I'll have a look... I'm on PB 5.20 though; not sure if it's using the same zlib library?
- notice that I set the compressed size with: LengthToWrite = deflateBound(@strm, LengthToRead) / 2
-- not sure why delatebound is not optimizing compression - thus the reason for "dividing by two" (modify to whatever works)
Nop still corrupt.
I have download and try with zlib.dll version 1.2.3, 1.2.5 and 1.2.7 not work either with this all versions
I will give up compress my dds files I need them compressed because of the size but don't work and I don't know what happens.
I can only thank you all for your patience and assistance provided
special thanks to JHPJHP which is what had more patience with me.
thank you.
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 7:57 am
by JHPJHP
Hi moob,
Can you download it again and run it in debug mode... let me know if you get a Hash MATCH?
- I included a Hash Fingerprint comparison
- run it exactly as is, using the supplied DLL
Re: How to compress with zlib
Posted: Mon Oct 21, 2013 8:11 am
by moob
JHPJHP wrote:Hi moob,
Can you download it again and run it in debug mode... let me know if you get a Hash MATCH?
- I included a Hash Fingerprint comparison
- run it exactly as is, using the supplied DLL
MATCH:
8e8c5f619da1de67d67480671fc2827c
8e8c5f619da1de67d67480671fc2827c
but the dds compressed file still corrupt
