LZW |
It is a compression algorithm that uses a lookup table known as dictionary table or just dictionary. It was created by Abraham Lempel, Jacob Ziv, and Terry Welch. It is used in GIF and TIFF images. The encoded data consist of a sequences of codes. Each code has length from 9 to 12 bits. Each code represents:
Es un algoritmo de compresión que usa una tabla de Lookup conocida como tabla diccionario o solamente diccionario. Este fue creado por Abraham Lempel, Jacob Ziv y Terry Welch. Es usado en las imágenes de GIF y TIFF. Los datos codificados consiste de una secuencia de códigos. Cada código tiene una longitud de 9 a 12 bits. Cada código representa:
|
Encoder |
It performs the following steps (see the pseudo code below):
Este realiza los siguientes pasos (vea el pseudo código de abajo):
|
Problem 1 |
Create a dialog application called AbrahamJacob using Wintempla. After creating the application create the GUI shown. You may set the multiline property on the three textboxes. Cree una aplicación de Diálogo llamada AbrahamJacob usando Wintempla. Después de crear el programa cree la GUI mostrada. Usted puede fijar la propiedad de multiline en las tres cajas de texto. |
AbrahamJacob.h |
#pragma once //______________________________________ AbrahamJacob.h #include "Resource.h" class AbrahamJacob: public Win::Dialog { public: AbrahamJacob() { } ~AbrahamJacob() { } string compressedData; . . . }; |
AbrahamJacob.cpp |
. . . void AbrahamJacob::btCompress_Click(Win::Event& e) { compressedData.clear(); //__________________________________________________________ 1. Get input wstring data = tbxInput.Text; string input; Sys::Convert::WstringToString(data, input); //__________________________________________________________ 2. Compress Sys::Lzw lzw; lzw.Compress(input, compressedData); //__________________________________________________________ 3. Display compressed data vector<unsigned __int32>::iterator p; wstring text; wchar_t tmp[32]; for (p = lzw.outputCodes.begin(); p != lzw.outputCodes.end(); p++) { _snwprintf_s(tmp, 32, _TRUNCATE, L"%d ", (unsigned int)*p); text += tmp; } tbxCompressed.Text = text; } void AbrahamJacob::btUncompress_Click(Win::Event& e) { //__________________________________________________________ 1. Expand Sys::Lzw lzw; string restored; lzw.Expand(compressedData, restored); //__________________________________________________________ 2. Display compressed data string::iterator p; wstring text; Sys::Convert::StringToWstring(restored, text); tbxRestored.Text = text; } |
Packeting of bits in a GIF file |
The figure below shows how the codes produced by the LZW algorithm are packed in a GIF file. La figura de abajo muestra como los códigos producidos por el algoritmo de LZW son empaquetados en archivo GIF. |
Packeting of bits in a PDF file |
The figure below shows how the codes produced by the LZW algorithm are packed in a PDF file. La figura de abajo muestra como los códigos producidos por el algoritmo de LZW son empaquetados en archivo PDF. |
Expanding a LZW |
The algorithm below shows how to obtain the original data from the LZW compressed data. A basic algorithm is shown to illustrate how it works. The correct algorithm handles when a code is not in the dictionary. El algoritmo de abajo muestra cómo obtener los datos originales desde los datos comprimidos LZW. Un algoritmo básico ilustra como este funciona. El algoritmo correcto procesa cuando un código no está en el diccionario. |
Tip |
The following examples show some complete examples for this algorithm. El siguiente ejemplos muestran algunos ejemplos completos de este algoritmo. |