⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tifccitt.pas

📁 ·ImageEn 2.3.0 ImageEn一组用于图像处理、查看和分析的Delphi控件。能够保存几种图像格式
💻 PAS
📖 第 1 页 / 共 2 页
字号:
(*
Copyright (c) 1998-2007 by HiComponents. All rights reserved.

This software comes without express or implied warranty.
In no case shall the author be liable for any damage or unwanted behavior of any
computer hardware and/or software.

HiComponents grants you the right to include the compiled component
in your application, whether COMMERCIAL, SHAREWARE, or FREEWARE,
BUT YOU MAY NOT DISTRIBUTE THIS SOURCE CODE OR ITS COMPILED .DCU IN ANY FORM.

ImageEn, IEvolution and ImageEn ActiveX may not be included in any commercial,
shareware or freeware libraries or components.

email: support@hicomponents.com

http://www.hicomponents.com
*)

unit tifccitt;

{$R-}
{$Q-}

{$I ie.inc}

interface

uses Windows, sysutils, classes, hyiedefs;

function CCITTHuffmanGetLine(dstbuf, srcbuf: pbyte; srcbufLen:integer; Width: integer; FillOrder: integer): integer;
function _CCITTHuffmanGetLine(dstbuf, srcbuf: pbyte; srcbufLen:integer; Width: integer; posb: integer; FillOrder: integer): integer;
function CCITT3_2D_GetLine(dstbuf, srcbuf: pbyte; srcbuflen: integer; Width: integer; predbuf: pbyte; posb: integer; FillOrder: integer; AlignEOL: boolean): integer;
procedure CCITTHuffmanPutLine(rdata: pbyte; wb: integer; fs: TStream; var Aborting: boolean; FillOrder:integer);
procedure CCITTHuffmanPutLineG3(rdata: pbyte; wb: integer; fs: TStream; var bwr: byte; var bwrl: integer; var Aborting: boolean; FillOrder:integer);
procedure CCITTHuffmanPutLineG32D(rdata: pbyte; wb: integer; fs: TStream; var bwr: byte; var bwrl: integer; var predline: pbyte; var Aborting: boolean; FillOrder:integer);
procedure _CCITTHuffmanPutLine(rdata: pbyte; wb: integer; wbuf: pbyte; var wpos: integer; FillOrder:integer);
procedure CCITTHuffmanPutLineG4(rdata: pbyte; wb: integer; fs: TStream; var bwr: byte; var bwrl: integer; var predline: pbyte; var Aborting: boolean; FillOrder:integer);

implementation

uses hyieutils, ImageEnProc;

{$R-}

type

  ppbyte = ^pbyte;

  TT4Entry = record
    dim: integer; // numero di bit del codice
    code: word; // codice (max 14 bit)
    rl: integer; // run length
  end;
  PT4Entry = ^TT4Entry;

const
  G3CODE_INVALID = -1;
const
  G3CODE_INCOMP = -2;
const
  G3CODE_EOL = -3;
const
  G3CODE_EOF = -4;

const
  bitmask: array[0..7] of byte = ($80, $40, $20, $10, $08, $04, $02, $01);

  (*
  ibitmask32:array [0..31] of dword=(     $01,     $02,     $04,     $08,      $10,      $20,      $40,      $80,
                   $100,    $200,    $400,    $800,    $1000,    $2000,    $4000,    $8000,
                                       $10000,  $20000,  $40000,  $80000,  $100000,  $200000,  $400000,  $800000,
                                     $1000000,$2000000,$4000000,$8000000,$10000000,$20000000,$40000000,$80000000);
*)

  (*
bitmask32:array [0..31] of dword=(
  $80000000, $40000000, $20000000, $10000000, $08000000, $04000000, $02000000, $01000000,
  $800000,   $400000,   $200000,   $100000,   $080000,   $040000,   $020000,   $010000,
  $8000,     $4000,     $2000,     $1000,     $0800,     $0400,     $0200,     $0100,
  $80,       $40,       $20,       $10,       $08,       $04,       $02,       $01
  );
  *)

const
  T4_2DC: array[0..12] of TT4Entry = (
    (dim: 12; code: 0), // 000000000000 (12 zeri)   - 0:INVALID
    (dim: 4; code: 1), // 0001		 - 1:pass
    (dim: 3; code: 1), // 001 		 - 2:horizzontal
    (dim: 7; code: 2), // 0000010 	 - 3:vertical Vl(3)
    (dim: 6; code: 2), // 000010 	 - 4:vertical Vl(2)
    (dim: 3; code: 2), // 010 		 - 5:vertical Vl(1)
    (dim: 1; code: 1), // 1 			 - 6:vertical V(0)
    (dim: 3; code: 3), // 011 		 - 7:vertical Vr(1)
    (dim: 6; code: 3), // 000011 	 - 8:vertical Vr(2)
    (dim: 7; code: 3), // 0000011 	 - 9:vertical Vr(3)
    (dim: 10; code: 15), // 0000001111   - 10:extension 2-D (entrata in modo non compresso)
    (dim: 12; code: 15), // 000000001111 - 11:extension 1-D (entrata in modo non compresso)
    (dim: 12; code: 1) // 0000 00000001 - 12:EOL
    );

type
  PT4Tree = ^TT4Tree;
  TT4Tree = record
    code: integer;
    childs: array[0..1] of PT4Tree; // if 0 and 1 is nil this is a terminal node
  end;

var
  T4Tree: array[0..1] of TT4Tree;

const
  NUMCODES = 116 + 12;
const
  T4Codes: array[0..1, 0..NUMCODES - 1] of TT4Entry = ((
    // WHITE CODES
    (dim: 8; code: $35; rl: 0), // 0011 0101
    (dim: 6; code: $7; rl: 1), // 0001 11
    (dim: 4; code: $7; rl: 2), // 0111
    (dim: 4; code: $8; rl: 3), // 1000
    (dim: 4; code: $B; rl: 4), // 1011
    (dim: 4; code: $C; rl: 5), // 1100
    (dim: 4; code: $E; rl: 6), // 1110
    (dim: 4; code: $F; rl: 7), // 1111
    (dim: 5; code: $13; rl: 8), // 1001 1
    (dim: 5; code: $14; rl: 9), // 1010 0
    (dim: 5; code: $7; rl: 10), // 0011 1
    (dim: 5; code: $8; rl: 11), // 0100 0
    (dim: 6; code: $8; rl: 12), // 0010 00
    (dim: 6; code: $3; rl: 13), // 0000 11
    (dim: 6; code: $34; rl: 14), // 1101 00
    (dim: 6; code: $35; rl: 15), // 1101 01
    (dim: 6; code: $2A; rl: 16), // 1010 10
    (dim: 6; code: $2B; rl: 17), // 1010 11
    (dim: 7; code: $27; rl: 18), // 0100 111
    (dim: 7; code: $C; rl: 19), // 0001 100
    (dim: 7; code: $8; rl: 20), // 0001 000
    (dim: 7; code: $17; rl: 21), // 0010 111
    (dim: 7; code: $3; rl: 22), // 0000 011
    (dim: 7; code: $4; rl: 23), // 0000 100
    (dim: 7; code: $28; rl: 24), // 0101 000
    (dim: 7; code: $2B; rl: 25), // 0101 011
    (dim: 7; code: $13; rl: 26), // 0010 011
    (dim: 7; code: $24; rl: 27), // 0100 100
    (dim: 7; code: $18; rl: 28), // 0011 000
    (dim: 8; code: $2; rl: 29), // 0000 0010
    (dim: 8; code: $3; rl: 30), // 0000 0011
    (dim: 8; code: $1A; rl: 31), // 0001 1010
    (dim: 8; code: $1B; rl: 32), // 0001 1011
    (dim: 8; code: $12; rl: 33), // 0001 0010
    (dim: 8; code: $13; rl: 34), // 0001 0011
    (dim: 8; code: $14; rl: 35), // 0001 0100
    (dim: 8; code: $15; rl: 36), // 0001 0101
    (dim: 8; code: $16; rl: 37), // 0001 0110
    (dim: 8; code: $17; rl: 38), // 0001 0111
    (dim: 8; code: $28; rl: 39), // 0010 1000
    (dim: 8; code: $29; rl: 40), // 0010 1001
    (dim: 8; code: $2A; rl: 41), // 0010 1010
    (dim: 8; code: $2B; rl: 42), // 0010 1011
    (dim: 8; code: $2C; rl: 43), // 0010 1100
    (dim: 8; code: $2D; rl: 44), // 0010 1101
    (dim: 8; code: $4; rl: 45), // 0000 0100
    (dim: 8; code: $5; rl: 46), // 0000 0101
    (dim: 8; code: $A; rl: 47), // 0000 1010
    (dim: 8; code: $B; rl: 48), // 0000 1011
    (dim: 8; code: $52; rl: 49), // 0101 0010
    (dim: 8; code: $53; rl: 50), // 0101 0011
    (dim: 8; code: $54; rl: 51), // 0101 0100
    (dim: 8; code: $55; rl: 52), // 0101 0101
    (dim: 8; code: $24; rl: 53), // 0010 0100
    (dim: 8; code: $25; rl: 54), // 0010 0101
    (dim: 8; code: $58; rl: 55), // 0101 1000
    (dim: 8; code: $59; rl: 56), // 0101 1001
    (dim: 8; code: $5A; rl: 57), // 0101 1010
    (dim: 8; code: $5B; rl: 58), // 0101 1011
    (dim: 8; code: $4A; rl: 59), // 0100 1010
    (dim: 8; code: $4B; rl: 60), // 0100 1011
    (dim: 8; code: $32; rl: 61), // 0011 0010
    (dim: 8; code: $33; rl: 62), // 0011 0011
    (dim: 8; code: $34; rl: 63), // 0011 0100
    (dim: 5; code: $1B; rl: 64), // 1101 1
    (dim: 5; code: $12; rl: 128), // 1001 0
    (dim: 6; code: $17; rl: 192), // 0101 11
    (dim: 7; code: $37; rl: 256), // 0110 111
    (dim: 8; code: $36; rl: 320), // 0011 0110
    (dim: 8; code: $37; rl: 384), // 0011 0111
    (dim: 8; code: $64; rl: 448), // 0110 0100
    (dim: 8; code: $65; rl: 512), // 0110 0101
    (dim: 8; code: $68; rl: 576), // 0110 1000
    (dim: 8; code: $67; rl: 640), // 0110 0111
    (dim: 9; code: $CC; rl: 704), // 0110 0110 0
    (dim: 9; code: $CD; rl: 768), // 0110 0110 1
    (dim: 9; code: $D2; rl: 832), // 0110 1001 0
    (dim: 9; code: $D3; rl: 896), // 0110 1001 1
    (dim: 9; code: $D4; rl: 960), // 0110 1010 0
    (dim: 9; code: $D5; rl: 1024), // 0110 1010 1
    (dim: 9; code: $D6; rl: 1088), // 0110 1011 0
    (dim: 9; code: $D7; rl: 1152), // 0110 1011 1
    (dim: 9; code: $D8; rl: 1216), // 0110 1100 0
    (dim: 9; code: $D9; rl: 1280), // 0110 1100 1
    (dim: 9; code: $DA; rl: 1344), // 0110 1101 0
    (dim: 9; code: $DB; rl: 1408), // 0110 1101 1
    (dim: 9; code: $98; rl: 1472), // 0100 1100 0
    (dim: 9; code: $99; rl: 1536), // 0100 1100 1
    (dim: 9; code: $9A; rl: 1600), // 0100 1101 0
    (dim: 6; code: $18; rl: 1664), // 0110 00
    (dim: 9; code: $9B; rl: 1728), // 0100 1101 1
    (dim: 11; code: $8; rl: 1792), // 0000 0001 000
    (dim: 11; code: $C; rl: 1856), // 0000 0001 100
    (dim: 11; code: $D; rl: 1920), // 0000 0001 101
    (dim: 12; code: $12; rl: 1984), // 0000 0001 0010
    (dim: 12; code: $13; rl: 2048), // 0000 0001 0011
    (dim: 12; code: $14; rl: 2112), // 0000 0001 0100
    (dim: 12; code: $15; rl: 2176), // 0000 0001 0101
    (dim: 12; code: $16; rl: 2240), // 0000 0001 0110
    (dim: 12; code: $17; rl: 2304), // 0000 0001 0111
    (dim: 12; code: $1C; rl: 2368), // 0000 0001 1100
    (dim: 12; code: $1D; rl: 2432), // 0000 0001 1101
    (dim: 12; code: $1E; rl: 2496), // 0000 0001 1110
    (dim: 12; code: $1F; rl: 2560), // 0000 0001 1111
    (dim: 12; code: $1; rl: G3CODE_EOL), // 0000 0000 0001
    (dim: 9; code: $1; rl: G3CODE_INVALID), // 0000 0000 1
    (dim: 10; code: $1; rl: G3CODE_INVALID), // 0000 0000 01
    (dim: 11; code: $1; rl: G3CODE_INVALID), // 0000 0000 001
    (dim: 13; code: $1; rl: G3CODE_EOL), // 0000000000001
    (dim: 14; code: $1; rl: G3CODE_EOL), // 00000000000001
    (dim: 15; code: $1; rl: G3CODE_EOL), // 000000000000001
    (dim: 16; code: $1; rl: G3CODE_EOL), // 0000000000000001
    (dim: 17; code: $1; rl: G3CODE_EOL), // 00000000000000001
    (dim: 18; code: $1; rl: G3CODE_EOL), // 000000000000000001
    (dim: 19; code: $1; rl: G3CODE_EOL), // 0000000000000000001
    (dim: 20; code: $1; rl: G3CODE_EOL), // 00000000000000000001
    //
    (dim: 21; code: $1; rl: G3CODE_EOL), // 000000000000000000001
    (dim: 22; code: $1; rl: G3CODE_EOL), // 0000000000000000000001
    (dim: 23; code: $1; rl: G3CODE_EOL), // 00000000000000000000001
    (dim: 24; code: $1; rl: G3CODE_EOL), // 000000000000000000000001
    (dim: 25; code: $1; rl: G3CODE_EOL), // 0000000000000000000000001
    (dim: 26; code: $1; rl: G3CODE_EOL), // 00000000000000000000000001
    (dim: 27; code: $1; rl: G3CODE_EOL), // 000000000000000000000000001
    (dim: 28; code: $1; rl: G3CODE_EOL), // 0000000000000000000000000001
    (dim: 29; code: $1; rl: G3CODE_EOL), // 00000000000000000000000000001
    (dim: 30; code: $1; rl: G3CODE_EOL), // 000000000000000000000000000001
    (dim: 31; code: $1; rl: G3CODE_EOL), // 0000000000000000000000000000001
    (dim: 32; code: $1; rl: G3CODE_EOL) // 00000000000000000000000000000001
    ), (

    // BLACK CODES
    (dim: 10; code: $37; rl: 0), // 0000 1101 11
    (dim: 3; code: $2; rl: 1), // 010
    (dim: 2; code: $3; rl: 2), // 11
    (dim: 2; code: $2; rl: 3), // 10
    (dim: 3; code: $3; rl: 4), // 011
    (dim: 4; code: $3; rl: 5), // 0011
    (dim: 4; code: $2; rl: 6), // 0010
    (dim: 5; code: $3; rl: 7), // 0001 1
    (dim: 6; code: $5; rl: 8), // 0001 01
    (dim: 6; code: $4; rl: 9), // 0001 00
    (dim: 7; code: $4; rl: 10), // 0000 100
    (dim: 7; code: $5; rl: 11), // 0000 101
    (dim: 7; code: $7; rl: 12), // 0000 111
    (dim: 8; code: $4; rl: 13), // 0000 0100
    (dim: 8; code: $7; rl: 14), // 0000 0111
    (dim: 9; code: $18; rl: 15), // 0000 1100 0
    (dim: 10; code: $17; rl: 16), // 0000 0101 11
    (dim: 10; code: $18; rl: 17), // 0000 0110 00
    (dim: 10; code: $8; rl: 18), // 0000 0010 00
    (dim: 11; code: $67; rl: 19), // 0000 1100 111
    (dim: 11; code: $68; rl: 20), // 0000 1101 000
    (dim: 11; code: $6C; rl: 21), // 0000 1101 100
    (dim: 11; code: $37; rl: 22), // 0000 0110 111
    (dim: 11; code: $28; rl: 23), // 0000 0101 000
    (dim: 11; code: $17; rl: 24), // 0000 0010 111
    (dim: 11; code: $18; rl: 25), // 0000 0011 000
    (dim: 12; code: $CA; rl: 26), // 0000 1100 1010
    (dim: 12; code: $CB; rl: 27), // 0000 1100 1011
    (dim: 12; code: $CC; rl: 28), // 0000 1100 1100
    (dim: 12; code: $CD; rl: 29), // 0000 1100 1101
    (dim: 12; code: $68; rl: 30), // 0000 0110 1000
    (dim: 12; code: $69; rl: 31), // 0000 0110 1001
    (dim: 12; code: $6A; rl: 32), // 0000 0110 1010
    (dim: 12; code: $6B; rl: 33), // 0000 0110 1011

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -