Mercurial > hg > ltpda
diff m-toolbox/classes/+utils/@helper/dunzip.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/+utils/@helper/dunzip.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,40 @@ +function M = dunzip(Z) +% DUNZIP - decompress DZIP output to recover original data +% +% USAGE: +% M = dzip(Z) +% +% VARIABLES: +% Z = compressed variable to decompress +% M = decompressed output +% +% NOTES: (1) The input variable Z is created by the DZIP function and +% is a vector of type uint8 +% (2) The decompressed output will have the same data type and +% dimensions as the original data provided to DZIP. +% (3) See DZIP for other notes. +% (4) Carefully tested, but no warranty; use at your own risk. +% (5) Michael Kleder, Nov 2005 + +import com.mathworks.mlwidgets.io.InterruptibleStreamCopier +a=java.io.ByteArrayInputStream(Z); +b=java.util.zip.InflaterInputStream(a); +isc = InterruptibleStreamCopier.getInterruptibleStreamCopier; +c = java.io.ByteArrayOutputStream; +isc.copyStream(b,c); +Q=typecast(c.toByteArray,'uint8'); +cn = double(Q(1)); % class +nd = double(Q(2)); % # dims +s = typecast(Q(3:8*nd+2),'double')'; % size +Q=Q(8*nd+3:end); +if cn == 3 + M = logical(Q); +elseif cn == 4 + M = char(Q); +else + ct = {'double','single','logical','char','int8','uint8',... + 'int16','uint16','int32','uint32','int64','uint64'}; + M = typecast(Q,ct{cn}); +end +M=reshape(M,s); +return