{"id":463,"date":"2009-08-05T08:12:04","date_gmt":"2009-08-05T11:12:04","guid":{"rendered":"http:\/\/leandroascierto.com\/blog\/?p=463"},"modified":"2011-08-27T08:29:18","modified_gmt":"2011-08-27T11:29:18","slug":"comprimir-y-descomprimir-un-array","status":"publish","type":"post","link":"https:\/\/leandroascierto.com\/blog\/comprimir-y-descomprimir-un-array\/","title":{"rendered":"Comprimir y Descomprimir un Array de bits"},"content":{"rendered":"<p style=\"text-align: justify;\">Estas dos funciones sirven para comprimir y descomprimir un array de una forma muy r\u00e1pida y seg\u00fan el caso puede reducirle el tama\u00f1o hasta 10 veces, esto depende del tama\u00f1o del mismo o si los datos que este contengan no est\u00e1n comprimidos (por ejemplo no comprimir\u00e1 el array de una im\u00e1gen .JPG o un archivo .ZIP, si de una im\u00e1gen BMP un archivo .EXE). las funciones utilizan las Apis de NTDLL.DLL<\/p>\n<p>* Nota: \u00a0Algunos antivirus detectan estas Apis como una posible\u00a0amenaza, es un dato para tener en cuenta si alguna vez la\u00a0aplicaci\u00f3n\u00a0es marcada\u00a0como un\u00a0virus.<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\nOption Explicit\r\nPrivate Declare Function RtlGetCompressionWorkSpaceSize Lib &quot;NTDLL&quot; (ByVal flags As Integer, WorkSpaceSize As Long, UNKNOWN_PARAMETER As Long) As Long\r\nPrivate Declare Function NtAllocateVirtualMemory Lib &quot;ntdll.dll&quot; (ByVal ProcHandle As Long, BaseAddress As Long, ByVal NumBits As Long, regionsize As Long, ByVal flags As Long, ByVal ProtectMode As Long) As Long\r\nPrivate Declare Function RtlCompressBuffer Lib &quot;NTDLL&quot; (ByVal flags As Integer, ByVal BuffUnCompressed As Long, ByVal UnCompSize As Long, ByVal BuffCompressed As Long, ByVal CompBuffSize As Long, ByVal UNKNOWN_PARAMETER As Long, OutputSize As Long, ByVal WorkSpace As Long) As Long\r\nPrivate Declare Function RtlDecompressBuffer Lib &quot;NTDLL&quot; (ByVal flags As Integer, ByVal BuffUnCompressed As Long, ByVal UnCompSize As Long, ByVal BuffCompressed As Long, ByVal CompBuffSize As Long, OutputSize As Long) As Long\r\nPrivate Declare Function NtFreeVirtualMemory Lib &quot;ntdll.dll&quot; (ByVal ProcHandle As Long, BaseAddress As Long, regionsize As Long, ByVal flags As Long) As Long\r\n\r\nPublic Function Compress(Data() As Byte, Out() As Byte) As Long\r\n    Dim WorkSpaceSize As Long\r\n    Dim WorkSpace As Long\r\n    ReDim Out(UBound(Data) * 1.13 + 4)\r\n\r\n    RtlGetCompressionWorkSpaceSize 2, WorkSpaceSize, 0\r\n    NtAllocateVirtualMemory -1, WorkSpace, 0, WorkSpaceSize, 4096, 64\r\n    RtlCompressBuffer 2, VarPtr(Data(0)), UBound(Data) + 1, VarPtr(Out(0)), (UBound(Data) * 1.13 + 4), 0, Compress, WorkSpace\r\n    NtFreeVirtualMemory -1, WorkSpace, 0, 16384\r\n    ReDim Preserve Out(Compress)\r\nEnd Function\r\n\r\nPublic Function DeCompress(Data() As Byte, dest() As Byte) As Long\r\n    If UBound(Data) Then\r\n        Dim lBufferSize As Long\r\n        ReDim dest(UBound(Data) * 12.5)\r\n        RtlDecompressBuffer 2, VarPtr(dest(0)), (UBound(Data) * 12.5), VarPtr(Data(0)), UBound(Data), lBufferSize\r\n        If lBufferSize Then\r\n            ReDim Preserve dest(lBufferSize - 1)\r\n            DeCompress = lBufferSize - 1\r\n        End If\r\n    End If\r\nEnd Function\r\n<\/pre>\n<\/p>\n<p align=\"center\"><a href=\"https:\/\/leandroascierto.com\/blog\/descarga.php?url=Ejemplo_Comprimir_Array.zip\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Descargar\" src=\"https:\/\/leandroascierto.com\/blog\/descarga.php?file=Ejemplo_Comprimir_Array.zip\" alt=\"\" width=\"280\" height=\"61\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estas dos funciones sirven para comprimir y descomprimir un array de una forma muy r\u00e1pida y seg\u00fan el caso puede reducirle el tama\u00f1o hasta 10 veces, esto depende del tama\u00f1o del mismo o si los datos que este contengan no est\u00e1n comprimidos (por ejemplo no comprimir\u00e1 el array de una im\u00e1gen .JPG o un archivo <a href='https:\/\/leandroascierto.com\/blog\/comprimir-y-descomprimir-un-array\/' class='excerpt-more'>[&#8230;]<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[80],"class_list":["post-463","post","type-post","status-publish","format-standard","hentry","category-funciones","tag-compress","category-42-id","post-seq-1","post-parity-odd","meta-position-corners","fix"],"_links":{"self":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/comments?post=463"}],"version-history":[{"count":7,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/463\/revisions"}],"predecessor-version":[{"id":528,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/posts\/463\/revisions\/528"}],"wp:attachment":[{"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/media?parent=463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/categories?post=463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/leandroascierto.com\/blog\/wp-json\/wp\/v2\/tags?post=463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}