summaryrefslogtreecommitdiff
path: root/goodies/source/filter.vcl/itiff
diff options
context:
space:
mode:
Diffstat (limited to 'goodies/source/filter.vcl/itiff')
-rw-r--r--goodies/source/filter.vcl/itiff/ccidecom.cxx1115
-rw-r--r--goodies/source/filter.vcl/itiff/ccidecom.hxx128
-rw-r--r--goodies/source/filter.vcl/itiff/exports.map7
-rw-r--r--goodies/source/filter.vcl/itiff/itiff.cxx1345
-rw-r--r--goodies/source/filter.vcl/itiff/lzwdecom.cxx195
-rw-r--r--goodies/source/filter.vcl/itiff/lzwdecom.hxx82
-rw-r--r--goodies/source/filter.vcl/itiff/makefile.mk75
7 files changed, 0 insertions, 2947 deletions
diff --git a/goodies/source/filter.vcl/itiff/ccidecom.cxx b/goodies/source/filter.vcl/itiff/ccidecom.cxx
deleted file mode 100644
index 5330ab26838e..000000000000
--- a/goodies/source/filter.vcl/itiff/ccidecom.cxx
+++ /dev/null
@@ -1,1115 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: ccidecom.cxx,v $
- * $Revision: 1.9 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_goodies.hxx"
-
-#include "ccidecom.hxx"
-
-//=============================== Huffman-Tabellen ========================
-
-//---------------------------- White-Run ------------------------------
-
-#define CCIWhiteTableSize 105
-
-const CCIHuffmanTableEntry CCIWhiteTable[CCIWhiteTableSize]={
- { 0, 0x0035, 8 },
- { 1, 0x0007, 6 },
- { 2, 0x0007, 4 },
- { 3, 0x0008, 4 },
- { 4, 0x000b, 4 },
- { 5, 0x000c, 4 },
- { 6, 0x000e, 4 },
- { 7, 0x000f, 4 },
- { 8, 0x0013, 5 },
- { 9, 0x0014, 5 },
- { 10, 0x0007, 5 },
- { 11, 0x0008, 5 },
- { 12, 0x0008, 6 },
- { 13, 0x0003, 6 },
- { 14, 0x0034, 6 },
- { 15, 0x0035, 6 },
- { 16, 0x002a, 6 },
- { 17, 0x002b, 6 },
- { 18, 0x0027, 7 },
- { 19, 0x000c, 7 },
- { 20, 0x0008, 7 },
- { 21, 0x0017, 7 },
- { 22, 0x0003, 7 },
- { 23, 0x0004, 7 },
- { 24, 0x0028, 7 },
- { 25, 0x002b, 7 },
- { 26, 0x0013, 7 },
- { 27, 0x0024, 7 },
- { 28, 0x0018, 7 },
- { 29, 0x0002, 8 },
- { 30, 0x0003, 8 },
- { 31, 0x001a, 8 },
- { 32, 0x001b, 8 },
- { 33, 0x0012, 8 },
- { 34, 0x0013, 8 },
- { 35, 0x0014, 8 },
- { 36, 0x0015, 8 },
- { 37, 0x0016, 8 },
- { 38, 0x0017, 8 },
- { 39, 0x0028, 8 },
- { 40, 0x0029, 8 },
- { 41, 0x002a, 8 },
- { 42, 0x002b, 8 },
- { 43, 0x002c, 8 },
- { 44, 0x002d, 8 },
- { 45, 0x0004, 8 },
- { 46, 0x0005, 8 },
- { 47, 0x000a, 8 },
- { 48, 0x000b, 8 },
- { 49, 0x0052, 8 },
- { 50, 0x0053, 8 },
- { 51, 0x0054, 8 },
- { 52, 0x0055, 8 },
- { 53, 0x0024, 8 },
- { 54, 0x0025, 8 },
- { 55, 0x0058, 8 },
- { 56, 0x0059, 8 },
- { 57, 0x005a, 8 },
- { 58, 0x005b, 8 },
- { 59, 0x004a, 8 },
- { 60, 0x004b, 8 },
- { 61, 0x0032, 8 },
- { 62, 0x0033, 8 },
- { 63, 0x0034, 8 },
- { 64, 0x001b, 5 },
- { 128, 0x0012, 5 },
- { 192, 0x0017, 6 },
- { 256, 0x0037, 7 },
- { 320, 0x0036, 8 },
- { 384, 0x0037, 8 },
- { 448, 0x0064, 8 },
- { 512, 0x0065, 8 },
- { 576, 0x0068, 8 },
- { 640, 0x0067, 8 },
- { 704, 0x00cc, 9 },
- { 768, 0x00cd, 9 },
- { 832, 0x00d2, 9 },
- { 896, 0x00d3, 9 },
- { 960, 0x00d4, 9 },
- { 1024, 0x00d5, 9 },
- { 1088, 0x00d6, 9 },
- { 1152, 0x00d7, 9 },
- { 1216, 0x00d8, 9 },
- { 1280, 0x00d9, 9 },
- { 1344, 0x00da, 9 },
- { 1408, 0x00db, 9 },
- { 1472, 0x0098, 9 },
- { 1536, 0x0099, 9 },
- { 1600, 0x009a, 9 },
- { 1664, 0x0018, 6 },
- { 1728, 0x009b, 9 },
- { 1792, 0x0008, 11 },
- { 1856, 0x000c, 11 },
- { 1920, 0x000d, 11 },
- { 1984, 0x0012, 12 },
- { 2048, 0x0013, 12 },
- { 2112, 0x0014, 12 },
- { 2176, 0x0015, 12 },
- { 2240, 0x0016, 12 },
- { 2304, 0x0017, 12 },
- { 2368, 0x001c, 12 },
- { 2432, 0x001d, 12 },
- { 2496, 0x001e, 12 },
- { 2560, 0x001f, 12 },
- { 9999, 0x0001, 12 } // EOL
-};
-
-//---------------------------- Black-Run ------------------------------
-
-#define CCIBlackTableSize 105
-
-const CCIHuffmanTableEntry CCIBlackTable[CCIBlackTableSize]={
- { 0, 0x0037, 10 },
- { 1, 0x0002, 3 },
- { 2, 0x0003, 2 },
- { 3, 0x0002, 2 },
- { 4, 0x0003, 3 },
- { 5, 0x0003, 4 },
- { 6, 0x0002, 4 },
- { 7, 0x0003, 5 },
- { 8, 0x0005, 6 },
- { 9, 0x0004, 6 },
- { 10, 0x0004, 7 },
- { 11, 0x0005, 7 },
- { 12, 0x0007, 7 },
- { 13, 0x0004, 8 },
- { 14, 0x0007, 8 },
- { 15, 0x0018, 9 },
- { 16, 0x0017, 10 },
- { 17, 0x0018, 10 },
- { 18, 0x0008, 10 },
- { 19, 0x0067, 11 },
- { 20, 0x0068, 11 },
- { 21, 0x006c, 11 },
- { 22, 0x0037, 11 },
- { 23, 0x0028, 11 },
- { 24, 0x0017, 11 },
- { 25, 0x0018, 11 },
- { 26, 0x00ca, 12 },
- { 27, 0x00cb, 12 },
- { 28, 0x00cc, 12 },
- { 29, 0x00cd, 12 },
- { 30, 0x0068, 12 },
- { 31, 0x0069, 12 },
- { 32, 0x006a, 12 },
- { 33, 0x006b, 12 },
- { 34, 0x00d2, 12 },
- { 35, 0x00d3, 12 },
- { 36, 0x00d4, 12 },
- { 37, 0x00d5, 12 },
- { 38, 0x00d6, 12 },
- { 39, 0x00d7, 12 },
- { 40, 0x006c, 12 },
- { 41, 0x006d, 12 },
- { 42, 0x00da, 12 },
- { 43, 0x00db, 12 },
- { 44, 0x0054, 12 },
- { 45, 0x0055, 12 },
- { 46, 0x0056, 12 },
- { 47, 0x0057, 12 },
- { 48, 0x0064, 12 },
- { 49, 0x0065, 12 },
- { 50, 0x0052, 12 },
- { 51, 0x0053, 12 },
- { 52, 0x0024, 12 },
- { 53, 0x0037, 12 },
- { 54, 0x0038, 12 },
- { 55, 0x0027, 12 },
- { 56, 0x0028, 12 },
- { 57, 0x0058, 12 },
- { 58, 0x0059, 12 },
- { 59, 0x002b, 12 },
- { 60, 0x002c, 12 },
- { 61, 0x005a, 12 },
- { 62, 0x0066, 12 },
- { 63, 0x0067, 12 },
- { 64, 0x000f, 10 },
- { 128, 0x00c8, 12 },
- { 192, 0x00c9, 12 },
- { 256, 0x005b, 12 },
- { 320, 0x0033, 12 },
- { 384, 0x0034, 12 },
- { 448, 0x0035, 12 },
- { 512, 0x006c, 13 },
- { 576, 0x006d, 13 },
- { 640, 0x004a, 13 },
- { 704, 0x004b, 13 },
- { 768, 0x004c, 13 },
- { 832, 0x004d, 13 },
- { 896, 0x0072, 13 },
- { 960, 0x0073, 13 },
- { 1024, 0x0074, 13 },
- { 1088, 0x0075, 13 },
- { 1152, 0x0076, 13 },
- { 1216, 0x0077, 13 },
- { 1280, 0x0052, 13 },
- { 1344, 0x0053, 13 },
- { 1408, 0x0054, 13 },
- { 1472, 0x0055, 13 },
- { 1536, 0x005a, 13 },
- { 1600, 0x005b, 13 },
- { 1664, 0x0064, 13 },
- { 1728, 0x0065, 13 },
- { 1792, 0x0008, 11 },
- { 1856, 0x000c, 11 },
- { 1920, 0x000d, 11 },
- { 1984, 0x0012, 12 },
- { 2048, 0x0013, 12 },
- { 2112, 0x0014, 12 },
- { 2176, 0x0015, 12 },
- { 2240, 0x0016, 12 },
- { 2304, 0x0017, 12 },
- { 2368, 0x001c, 12 },
- { 2432, 0x001d, 12 },
- { 2496, 0x001e, 12 },
- { 2560, 0x001f, 12 },
- { 9999, 0x0001, 12 } // EOL
-};
-
-
-//---------------------------- 2D-Mode --------------------------------
-
-#define CCI2DMODE_UNCOMP 0
-#define CCI2DMODE_PASS 1
-#define CCI2DMODE_HORZ 2
-#define CCI2DMODE_VERT_L3 3
-#define CCI2DMODE_VERT_L2 4
-#define CCI2DMODE_VERT_L1 5
-#define CCI2DMODE_VERT_0 6
-#define CCI2DMODE_VERT_R1 7
-#define CCI2DMODE_VERT_R2 8
-#define CCI2DMODE_VERT_R3 9
-
-#define CCI2DModeTableSize 10
-
-const CCIHuffmanTableEntry CCI2DModeTable[CCI2DModeTableSize]={
- { CCI2DMODE_UNCOMP , 0x000f, 10 },
- { CCI2DMODE_PASS , 0x0001, 4 },
- { CCI2DMODE_HORZ , 0x0001, 3 },
- { CCI2DMODE_VERT_L3, 0x0002, 7 },
- { CCI2DMODE_VERT_L2, 0x0002, 6 },
- { CCI2DMODE_VERT_L1, 0x0002, 3 },
- { CCI2DMODE_VERT_0 , 0x0001, 1 },
- { CCI2DMODE_VERT_R1, 0x0003, 3 },
- { CCI2DMODE_VERT_R2, 0x0003, 6 },
- { CCI2DMODE_VERT_R3, 0x0003, 7 }
-};
-
-
-//-------------------------- 2D-Uncompressed-Mode ----------------------
-
-#define CCIUNCOMP_0White_1Black 0
-#define CCIUNCOMP_1White_1Black 1
-#define CCIUNCOMP_2White_1Black 2
-#define CCIUNCOMP_3White_1Black 3
-#define CCIUNCOMP_4White_1Black 4
-#define CCIUNCOMP_5White 5
-#define CCIUNCOMP_0White_End 6
-#define CCIUNCOMP_1White_End 7
-#define CCIUNCOMP_2White_End 8
-#define CCIUNCOMP_3White_End 9
-#define CCIUNCOMP_4White_End 10
-
-#define CCIUncompTableSize 11
-
-const CCIHuffmanTableEntry CCIUncompTable[CCIUncompTableSize]={
- { CCIUNCOMP_0White_1Black, 0x0001, 1 },
- { CCIUNCOMP_1White_1Black, 0x0001, 2 },
- { CCIUNCOMP_2White_1Black, 0x0001, 3 },
- { CCIUNCOMP_3White_1Black, 0x0001, 4 },
- { CCIUNCOMP_4White_1Black, 0x0001, 5 },
- { CCIUNCOMP_5White , 0x0001, 6 },
- { CCIUNCOMP_0White_End , 0x0001, 7 },
- { CCIUNCOMP_1White_End , 0x0001, 8 },
- { CCIUNCOMP_2White_End , 0x0001, 9 },
- { CCIUNCOMP_3White_End , 0x0001, 10 },
- { CCIUNCOMP_4White_End , 0x0001, 11 }
-};
-
-
-//================== Sicherheitskopie der Huffman-Tabellen ================
-// Um sicher zugehen, dass die Huffman-Tabellen keine Fehler enthalten,
-// wurden sie zweimal von unterschiedlichen Quellen eingegeben (Uff) und
-// verglichen.
-// Da sich aber im Laufe der Pflege des Source-Codes mal ein Fehler
-// einschleichen koennte (z.B. versehentlicher druck einer Taste im Editor)
-// werden die Tablellen hier weiterhin zweimal aufgefuehrt und zur Laufzeit
-// verglichen. (Wenn der Vergleich fehlschlaegt, liefert CCIDecompressor
-// immer einen Fehler). Das Ganze mag etwas wahnsinnig erscheinen, aber ein Fehler
-// in den Tabellen waere sonst sehr sehr schwer zu erkennen, zumal es
-// unwahrscheinlich ist, dass eine oder mehere Beispieldateien alle Codes
-// durchlaufen.
-
-const CCIHuffmanTableEntry CCIWhiteTableSave[CCIWhiteTableSize]={
- { 0, 0x0035, 8 },
- { 1, 0x0007, 6 },
- { 2, 0x0007, 4 },
- { 3, 0x0008, 4 },
- { 4, 0x000b, 4 },
- { 5, 0x000c, 4 },
- { 6, 0x000e, 4 },
- { 7, 0x000f, 4 },
- { 8, 0x0013, 5 },
- { 9, 0x0014, 5 },
- { 10, 0x0007, 5 },
- { 11, 0x0008, 5 },
- { 12, 0x0008, 6 },
- { 13, 0x0003, 6 },
- { 14, 0x0034, 6 },
- { 15, 0x0035, 6 },
- { 16, 0x002a, 6 },
- { 17, 0x002b, 6 },
- { 18, 0x0027, 7 },
- { 19, 0x000c, 7 },
- { 20, 0x0008, 7 },
- { 21, 0x0017, 7 },
- { 22, 0x0003, 7 },
- { 23, 0x0004, 7 },
- { 24, 0x0028, 7 },
- { 25, 0x002b, 7 },
- { 26, 0x0013, 7 },
- { 27, 0x0024, 7 },
- { 28, 0x0018, 7 },
- { 29, 0x0002, 8 },
- { 30, 0x0003, 8 },
- { 31, 0x001a, 8 },
- { 32, 0x001b, 8 },
- { 33, 0x0012, 8 },
- { 34, 0x0013, 8 },
- { 35, 0x0014, 8 },
- { 36, 0x0015, 8 },
- { 37, 0x0016, 8 },
- { 38, 0x0017, 8 },
- { 39, 0x0028, 8 },
- { 40, 0x0029, 8 },
- { 41, 0x002a, 8 },
- { 42, 0x002b, 8 },
- { 43, 0x002c, 8 },
- { 44, 0x002d, 8 },
- { 45, 0x0004, 8 },
- { 46, 0x0005, 8 },
- { 47, 0x000a, 8 },
- { 48, 0x000b, 8 },
- { 49, 0x0052, 8 },
- { 50, 0x0053, 8 },
- { 51, 0x0054, 8 },
- { 52, 0x0055, 8 },
- { 53, 0x0024, 8 },
- { 54, 0x0025, 8 },
- { 55, 0x0058, 8 },
- { 56, 0x0059, 8 },
- { 57, 0x005a, 8 },
- { 58, 0x005b, 8 },
- { 59, 0x004a, 8 },
- { 60, 0x004b, 8 },
- { 61, 0x0032, 8 },
- { 62, 0x0033, 8 },
- { 63, 0x0034, 8 },
- { 64, 0x001b, 5 },
- { 128, 0x0012, 5 },
- { 192, 0x0017, 6 },
- { 256, 0x0037, 7 },
- { 320, 0x0036, 8 },
- { 384, 0x0037, 8 },
- { 448, 0x0064, 8 },
- { 512, 0x0065, 8 },
- { 576, 0x0068, 8 },
- { 640, 0x0067, 8 },
- { 704, 0x00cc, 9 },
- { 768, 0x00cd, 9 },
- { 832, 0x00d2, 9 },
- { 896, 0x00d3, 9 },
- { 960, 0x00d4, 9 },
- { 1024, 0x00d5, 9 },
- { 1088, 0x00d6, 9 },
- { 1152, 0x00d7, 9 },
- { 1216, 0x00d8, 9 },
- { 1280, 0x00d9, 9 },
- { 1344, 0x00da, 9 },
- { 1408, 0x00db, 9 },
- { 1472, 0x0098, 9 },
- { 1536, 0x0099, 9 },
- { 1600, 0x009a, 9 },
- { 1664, 0x0018, 6 },
- { 1728, 0x009b, 9 },
- { 1792, 0x0008, 11 },
- { 1856, 0x000c, 11 },
- { 1920, 0x000d, 11 },
- { 1984, 0x0012, 12 },
- { 2048, 0x0013, 12 },
- { 2112, 0x0014, 12 },
- { 2176, 0x0015, 12 },
- { 2240, 0x0016, 12 },
- { 2304, 0x0017, 12 },
- { 2368, 0x001c, 12 },
- { 2432, 0x001d, 12 },
- { 2496, 0x001e, 12 },
- { 2560, 0x001f, 12 },
- { 9999, 0x0001, 12 } // EOL
-};
-
-const CCIHuffmanTableEntry CCIBlackTableSave[CCIBlackTableSize]={
- { 0, 0x0037, 10 },
- { 1, 0x0002, 3 },
- { 2, 0x0003, 2 },
- { 3, 0x0002, 2 },
- { 4, 0x0003, 3 },
- { 5, 0x0003, 4 },
- { 6, 0x0002, 4 },
- { 7, 0x0003, 5 },
- { 8, 0x0005, 6 },
- { 9, 0x0004, 6 },
- { 10, 0x0004, 7 },
- { 11, 0x0005, 7 },
- { 12, 0x0007, 7 },
- { 13, 0x0004, 8 },
- { 14, 0x0007, 8 },
- { 15, 0x0018, 9 },
- { 16, 0x0017, 10 },
- { 17, 0x0018, 10 },
- { 18, 0x0008, 10 },
- { 19, 0x0067, 11 },
- { 20, 0x0068, 11 },
- { 21, 0x006c, 11 },
- { 22, 0x0037, 11 },
- { 23, 0x0028, 11 },
- { 24, 0x0017, 11 },
- { 25, 0x0018, 11 },
- { 26, 0x00ca, 12 },
- { 27, 0x00cb, 12 },
- { 28, 0x00cc, 12 },
- { 29, 0x00cd, 12 },
- { 30, 0x0068, 12 },
- { 31, 0x0069, 12 },
- { 32, 0x006a, 12 },
- { 33, 0x006b, 12 },
- { 34, 0x00d2, 12 },
- { 35, 0x00d3, 12 },
- { 36, 0x00d4, 12 },
- { 37, 0x00d5, 12 },
- { 38, 0x00d6, 12 },
- { 39, 0x00d7, 12 },
- { 40, 0x006c, 12 },
- { 41, 0x006d, 12 },
- { 42, 0x00da, 12 },
- { 43, 0x00db, 12 },
- { 44, 0x0054, 12 },
- { 45, 0x0055, 12 },
- { 46, 0x0056, 12 },
- { 47, 0x0057, 12 },
- { 48, 0x0064, 12 },
- { 49, 0x0065, 12 },
- { 50, 0x0052, 12 },
- { 51, 0x0053, 12 },
- { 52, 0x0024, 12 },
- { 53, 0x0037, 12 },
- { 54, 0x0038, 12 },
- { 55, 0x0027, 12 },
- { 56, 0x0028, 12 },
- { 57, 0x0058, 12 },
- { 58, 0x0059, 12 },
- { 59, 0x002b, 12 },
- { 60, 0x002c, 12 },
- { 61, 0x005a, 12 },
- { 62, 0x0066, 12 },
- { 63, 0x0067, 12 },
- { 64, 0x000f, 10 },
- { 128, 0x00c8, 12 },
- { 192, 0x00c9, 12 },
- { 256, 0x005b, 12 },
- { 320, 0x0033, 12 },
- { 384, 0x0034, 12 },
- { 448, 0x0035, 12 },
- { 512, 0x006c, 13 },
- { 576, 0x006d, 13 },
- { 640, 0x004a, 13 },
- { 704, 0x004b, 13 },
- { 768, 0x004c, 13 },
- { 832, 0x004d, 13 },
- { 896, 0x0072, 13 },
- { 960, 0x0073, 13 },
- { 1024, 0x0074, 13 },
- { 1088, 0x0075, 13 },
- { 1152, 0x0076, 13 },
- { 1216, 0x0077, 13 },
- { 1280, 0x0052, 13 },
- { 1344, 0x0053, 13 },
- { 1408, 0x0054, 13 },
- { 1472, 0x0055, 13 },
- { 1536, 0x005a, 13 },
- { 1600, 0x005b, 13 },
- { 1664, 0x0064, 13 },
- { 1728, 0x0065, 13 },
- { 1792, 0x0008, 11 },
- { 1856, 0x000c, 11 },
- { 1920, 0x000d, 11 },
- { 1984, 0x0012, 12 },
- { 2048, 0x0013, 12 },
- { 2112, 0x0014, 12 },
- { 2176, 0x0015, 12 },
- { 2240, 0x0016, 12 },
- { 2304, 0x0017, 12 },
- { 2368, 0x001c, 12 },
- { 2432, 0x001d, 12 },
- { 2496, 0x001e, 12 },
- { 2560, 0x001f, 12 },
- { 9999, 0x0001, 12 } // EOL
-};
-
-
-const CCIHuffmanTableEntry CCI2DModeTableSave[CCI2DModeTableSize]={
- { CCI2DMODE_UNCOMP , 0x000f, 10 },
- { CCI2DMODE_PASS , 0x0001, 4 },
- { CCI2DMODE_HORZ , 0x0001, 3 },
- { CCI2DMODE_VERT_L3, 0x0002, 7 },
- { CCI2DMODE_VERT_L2, 0x0002, 6 },
- { CCI2DMODE_VERT_L1, 0x0002, 3 },
- { CCI2DMODE_VERT_0 , 0x0001, 1 },
- { CCI2DMODE_VERT_R1, 0x0003, 3 },
- { CCI2DMODE_VERT_R2, 0x0003, 6 },
- { CCI2DMODE_VERT_R3, 0x0003, 7 }
-};
-
-
-const CCIHuffmanTableEntry CCIUncompTableSave[CCIUncompTableSize]={
- { CCIUNCOMP_0White_1Black, 0x0001, 1 },
- { CCIUNCOMP_1White_1Black, 0x0001, 2 },
- { CCIUNCOMP_2White_1Black, 0x0001, 3 },
- { CCIUNCOMP_3White_1Black, 0x0001, 4 },
- { CCIUNCOMP_4White_1Black, 0x0001, 5 },
- { CCIUNCOMP_5White , 0x0001, 6 },
- { CCIUNCOMP_0White_End , 0x0001, 7 },
- { CCIUNCOMP_1White_End , 0x0001, 8 },
- { CCIUNCOMP_2White_End , 0x0001, 9 },
- { CCIUNCOMP_3White_End , 0x0001, 10 },
- { CCIUNCOMP_4White_End , 0x0001, 11 }
-};
-
-//=========================================================================
-
-
-CCIDecompressor::CCIDecompressor( ULONG nOpts, UINT32 nImageWidth ) :
- bTableBad ( FALSE ),
- bStatus ( FALSE ),
- pByteSwap ( NULL ),
- nWidth ( nImageWidth ),
- nOptions ( nOpts ),
- pLastLine ( NULL )
-{
- if ( nOpts & CCI_OPTION_INVERSEBITORDER )
- {
- pByteSwap = new BYTE[ 256 ];
- for ( int i = 0; i < 256; i++ )
- {
- pByteSwap[ i ] = sal::static_int_cast< BYTE >(
- ( i << 7 ) | ( ( i & 2 ) << 5 ) | ( ( i & 4 ) << 3 ) | ( ( i & 8 ) << 1 ) |
- ( ( i & 16 ) >> 1 ) | ( ( i & 32 ) >> 3 ) | ( ( i & 64 ) >> 5 ) | ( ( i & 128 ) >> 7 ));
- }
- }
-
- pWhiteLookUp =new CCILookUpTableEntry[1<<13];
- pBlackLookUp =new CCILookUpTableEntry[1<<13];
- p2DModeLookUp=new CCILookUpTableEntry[1<<10];
- pUncompLookUp=new CCILookUpTableEntry[1<<11];
-
- MakeLookUp(CCIWhiteTable,CCIWhiteTableSave,pWhiteLookUp,CCIWhiteTableSize,13);
- MakeLookUp(CCIBlackTable,CCIBlackTableSave,pBlackLookUp,CCIBlackTableSize,13);
- MakeLookUp(CCI2DModeTable,CCI2DModeTableSave,p2DModeLookUp,CCI2DModeTableSize,10);
- MakeLookUp(CCIUncompTable,CCIUncompTableSave,pUncompLookUp,CCIUncompTableSize,11);
-}
-
-
-CCIDecompressor::~CCIDecompressor()
-{
- delete[] pByteSwap;
- delete[] pLastLine;
- delete[] pWhiteLookUp;
- delete[] pBlackLookUp;
- delete[] p2DModeLookUp;
- delete[] pUncompLookUp;
-}
-
-
-void CCIDecompressor::StartDecompression( SvStream & rIStream )
-{
- pIStream = &rIStream;
- nInputBitsBufSize = 0;
- bFirstEOL = TRUE;
- bStatus = TRUE;
- nEOLCount = 0;
-
- if ( bTableBad == TRUE )
- return;
-}
-
-
-BOOL CCIDecompressor::DecompressScanline( BYTE * pTarget, ULONG nTargetBits )
-{
- USHORT i;
- BYTE * pSrc,* pDst;
- BOOL b2D;
-
- if ( nEOLCount >= 5 ) // RTC( Return To Controller )
- return TRUE;
-
- if ( bStatus == FALSE )
- return FALSE;
-
- // Wenn EOL-Codes vorhanden sind, steht der EOL-Code auch vor der ersten Zeile.
- // (und ich dachte EOL heisst 'End Of Line'...)
- // Daher lesen wir den EOL-Code immer vor jeder Zeile als erstes ein:
- if ( nOptions & CCI_OPTION_EOL )
- {
- if ( bFirstEOL )
- {
- UINT32 nCurPos = pIStream->Tell();
- UINT16 nOldInputBitsBufSize = nInputBitsBufSize;
- UINT32 nOldInputBitsBuf = nInputBitsBuf;
- if ( ReadEOL( 32 ) == FALSE )
- {
- nInputBitsBufSize = nOldInputBitsBufSize;
- nInputBitsBuf = nOldInputBitsBuf;
- pIStream->Seek( nCurPos );
- nOptions &=~ CCI_OPTION_EOL; // CCITT Group 3 - Compression Type 2
- }
- bFirstEOL = FALSE;
- }
- else
- {
- if ( ReadEOL( nTargetBits ) == FALSE )
- {
- return bStatus;
- }
- }
- }
-
- if ( nEOLCount >= 5 ) // RTC( Return To Controller )
- return TRUE;
-
- // ggf. eine weisse vorherige Zeile herstellen fuer 2D:
- if ( nOptions & CCI_OPTION_2D )
- {
- if ( pLastLine == NULL || nLastLineSize != ( ( nTargetBits + 7 ) >> 3 ) )
- {
- if ( pLastLine == NULL )
- delete[] pLastLine;
- nLastLineSize = ( nTargetBits + 7 ) >> 3;
- pLastLine = new BYTE[ nLastLineSize ];
- pDst = pLastLine;
- for ( i = 0; i < nLastLineSize; i++ ) *( pDst++ ) = 0x00;
- }
- }
- // ggf. Zeilen-Anfang auf naechste Byte-Grenze runden:
- if ( nOptions & CCI_OPTION_BYTEALIGNROW )
- nInputBitsBufSize &= 0xfff8;
-
- // Ist es eine 2D-Zeile ?:
- if ( nOptions & CCI_OPTION_2D )
- {
- if ( nOptions & CCI_OPTION_EOL )
- b2D = Read2DTag();
- else
- b2D = TRUE;
- }
- else
- b2D = FALSE;
-
- // Zeile einlesen:
- if ( b2D )
- Read2DScanlineData( pTarget, (USHORT)nTargetBits );
- else
- Read1DScanlineData( pTarget, (USHORT)nTargetBits );
-
- // Wenn wir im 2D-Modus sind, muessen wir uns die Zeile merken:
- if ( nOptions & CCI_OPTION_2D && bStatus == TRUE )
- {
- pSrc = pTarget;
- pDst = pLastLine;
- for ( i = 0; i < nLastLineSize; i++ ) *(pDst++)=*(pSrc++);
- }
-
- if ( pIStream->GetError() )
- bStatus = FALSE;
-
- return bStatus;
-}
-
-
-void CCIDecompressor::MakeLookUp(const CCIHuffmanTableEntry * pHufTab,
- const CCIHuffmanTableEntry * pHufTabSave,
- CCILookUpTableEntry * pLookUp,
- USHORT nHuffmanTableSize,
- USHORT nMaxCodeBits)
-{
- USHORT i,j,nMinCode,nMaxCode,nLookUpSize,nMask;
-
- if (bTableBad==TRUE) return;
-
- nLookUpSize=1<<nMaxCodeBits;
-
- nMask=0xffff>>(16-nMaxCodeBits);
-
- for (i=0; i<nLookUpSize; i++) pLookUp[i].nCodeBits=0;
- for (i=0; i<nHuffmanTableSize; i++) {
- if ( pHufTab[i].nValue!=pHufTabSave[i].nValue ||
- pHufTab[i].nCode!=pHufTabSave[i].nCode ||
- pHufTab[i].nCodeBits!=pHufTabSave[i].nCodeBits ||
- pHufTab[i].nCodeBits==0 ||
- pHufTab[i].nCodeBits>nMaxCodeBits )
- {
- bTableBad=TRUE;
- return;
- }
- nMinCode = nMask & (pHufTab[i].nCode << (nMaxCodeBits-pHufTab[i].nCodeBits));
- nMaxCode = nMinCode | (nMask >> pHufTab[i].nCodeBits);
- for (j=nMinCode; j<=nMaxCode; j++) {
- if (pLookUp[j].nCodeBits!=0) {
- bTableBad=TRUE;
- return;
- }
- pLookUp[j].nValue=pHufTab[i].nValue;
- pLookUp[j].nCodeBits=pHufTab[i].nCodeBits;
- }
- }
-}
-
-
-BOOL CCIDecompressor::ReadEOL( UINT32 /*nMaxFillBits*/ )
-{
- USHORT nCode;
- BYTE nByte;
-
- // if (nOptions&CCI_OPTION_BYTEALIGNEOL) nMaxFillBits=7; else nMaxFillBits=0;
- // Buuuh: Entweder wird die Option in itiff.cxx nicht richtig gesetzt (-> Fehler in Doku)
- // oder es gibt tatsaechlich gemeine Export-Filter, die immer ein Align machen.
- // Ausserdem wurden Dateien gefunden, in denen mehr als die maximal 7 noetigen
- // Fuellbits vor dem EOL-Code stehen. Daher akzeptieren wir nun grundsaetzlich
- // bis zu 32-Bloedsinn-Bits vor dem EOL-Code:
- // und ich habe eine Datei gefunden in der bis zu ??? Bloedsinn Bits stehen, zudem ist dort die Bit Reihenfolge verdreht (SJ);
-
- UINT32 nMaxPos = pIStream->Tell();
- nMaxPos += nWidth >> 3;
-
- for ( ;; )
- {
- while ( nInputBitsBufSize < 12 )
- {
- *pIStream >> nByte;
- if ( pIStream->IsEof() )
- return FALSE;
- if ( pIStream->Tell() > nMaxPos )
- return FALSE;
-
- if ( nOptions & CCI_OPTION_INVERSEBITORDER )
- nByte = pByteSwap[ nByte ];
- nInputBitsBuf=(nInputBitsBuf<<8) | (ULONG)nByte;
- nInputBitsBufSize += 8;
- }
- nCode = (USHORT)( ( nInputBitsBuf >> ( nInputBitsBufSize - 12 ) ) & 0x0fff );
- if ( nCode == 0x0001 )
- {
- nEOLCount++;
- nInputBitsBufSize -= 12;
- break;
- }
- else
- nInputBitsBufSize--;
- }
- return TRUE;
-}
-
-
-BOOL CCIDecompressor::Read2DTag()
-{
- BYTE nByte;
-
- // Ein Bit einlesen und TRUE liefern, wenn es 0 ist, sonst FALSE
- if (nInputBitsBufSize==0) {
- *pIStream >> nByte;
- if ( nOptions & CCI_OPTION_INVERSEBITORDER )
- nByte = pByteSwap[ nByte ];
- nInputBitsBuf=(ULONG)nByte;
- nInputBitsBufSize=8;
- }
- nInputBitsBufSize--;
- if ( ((nInputBitsBuf>>nInputBitsBufSize)&0x0001) ) return FALSE;
- else return TRUE;
-}
-
-
-BYTE CCIDecompressor::ReadBlackOrWhite()
-{
- BYTE nByte;
-
- // Ein Bit einlesen und 0x00 liefern, wenn es 0 ist, sonst 0xff
- if (nInputBitsBufSize==0) {
- *pIStream >> nByte;
- if ( nOptions & CCI_OPTION_INVERSEBITORDER )
- nByte = pByteSwap[ nByte ];
- nInputBitsBuf=(ULONG)nByte;
- nInputBitsBufSize=8;
- }
- nInputBitsBufSize--;
- if ( ((nInputBitsBuf>>nInputBitsBufSize)&0x0001) ) return 0xff;
- else return 0x00;
-}
-
-
-USHORT CCIDecompressor::ReadCodeAndDecode(const CCILookUpTableEntry * pLookUp,
- USHORT nMaxCodeBits)
-{
- USHORT nCode,nCodeBits;
- BYTE nByte;
-
- // Einen Huffman-Code einlesen und dekodieren:
- while (nInputBitsBufSize<nMaxCodeBits) {
- *pIStream >> nByte;
- if ( nOptions & CCI_OPTION_INVERSEBITORDER )
- nByte = pByteSwap[ nByte ];
- nInputBitsBuf=(nInputBitsBuf<<8) | (ULONG)nByte;
- nInputBitsBufSize+=8;
- }
- nCode=(USHORT)((nInputBitsBuf>>(nInputBitsBufSize-nMaxCodeBits))
- &(0xffff>>(16-nMaxCodeBits)));
- nCodeBits=pLookUp[nCode].nCodeBits;
- if (nCodeBits==0) bStatus=FALSE;
- nInputBitsBufSize = nInputBitsBufSize - nCodeBits;
- return pLookUp[nCode].nValue;
-}
-
-
-void CCIDecompressor::FillBits(BYTE * pTarget, USHORT nTargetBits,
- USHORT nBitPos, USHORT nNumBits,
- BYTE nBlackOrWhite)
-{
- if ( nBitPos >= nTargetBits )
- return;
- if ( nBitPos + nNumBits > nTargetBits )
- nNumBits = nTargetBits - nBitPos;
-
- pTarget+=nBitPos>>3;
- nBitPos&=7;
-
- if (nBlackOrWhite==0x00) *pTarget &= 0xff << (8-nBitPos);
- else *pTarget |= 0xff >> nBitPos;
- if (nNumBits>8-nBitPos) {
- nNumBits-=8-nBitPos;
- while (nNumBits>=8) {
- *(++pTarget)=nBlackOrWhite;
- nNumBits-=8;
- }
- if (nNumBits>0) *(++pTarget)=nBlackOrWhite;
- }
-}
-
-
-USHORT CCIDecompressor::CountBits(const BYTE * pData, USHORT nDataSizeBits,
- USHORT nBitPos, BYTE nBlackOrWhite)
-{
- USHORT nPos,nLo;
- BYTE nData;
-
- // Hier wird die Anzahl der zusammenhaengenden Bits gezaehlt, die
- // ab Position nBitPos in pTarget alle die Farbe nBlackOrWhite
- // (0xff oder 0x00) haben.
-
- nPos=nBitPos;
- for (;;) {
- if (nPos>=nDataSizeBits) {
- nPos=nDataSizeBits;
- break;
- }
- nData=pData[nPos>>3];
- nLo=nPos & 7;
- if ( nLo==0 && nData==nBlackOrWhite) nPos+=8;
- else {
- if ( ((nData^nBlackOrWhite) & (0x80 >> nLo))!=0) break;
- nPos++;
- }
- }
- if (nPos<=nBitPos) return 0;
- else return nPos-nBitPos;
-}
-
-
-void CCIDecompressor::Read1DScanlineData(BYTE * pTarget, USHORT nTargetBits)
-{
- USHORT nCode,nCodeBits,nDataBits,nTgtFreeByteBits;
- BYTE nByte;
- BYTE nBlackOrWhite; // ist 0xff fuer Black oder 0x00 fuer White
- BOOL bTerminatingCode;
-
- // Der erste Code ist immer eine "White-Code":
- nBlackOrWhite=0x00;
-
- // Anzahl der Bits, die im Byte *pTarget noch nicht geschrieben sind:
- nTgtFreeByteBits=8;
-
- // Schleife ueber Codes aus dem Eingabe-Stream:
- do {
-
- // die naechsten 13 Bits nach nCode holen, aber noch nicht
- // aus dem Eingabe-Buffer loeschen:
- while (nInputBitsBufSize<13) {
- *pIStream >> nByte;
- if ( nOptions & CCI_OPTION_INVERSEBITORDER )
- nByte = pByteSwap[ nByte ];
- nInputBitsBuf=(nInputBitsBuf<<8) | (ULONG)nByte;
- nInputBitsBufSize+=8;
- }
- nCode=(USHORT)((nInputBitsBuf>>(nInputBitsBufSize-13))&0x1fff);
-
- // Anzahl der DatenBits und Anzahl der CodeBits ermitteln:
- if (nBlackOrWhite) {
- nCodeBits=pBlackLookUp[nCode].nCodeBits;
- nDataBits=pBlackLookUp[nCode].nValue;
- }
- else {
- nCodeBits=pWhiteLookUp[nCode].nCodeBits;
- nDataBits=pWhiteLookUp[nCode].nValue;
- }
- // Ist es ein Ungueltiger Code ?
- if ( nDataBits == 9999 )
- {
- return;
- }
- if ( nCodeBits == 0 )
- {
- return; // das koennen sich jetzt um FuellBits handeln
- }
- nEOLCount = 0;
- // Zuviele Daten ?
- if (nDataBits>nTargetBits) {
- // Ja, koennte ein Folge-Fehler durch ungueltigen Code sein,
- // daher irdenwie weitermachen:
- nDataBits=nTargetBits;
- }
-
- // Ist es ein 'Terminating-Code' ?
- if (nDataBits<64) bTerminatingCode=TRUE; else bTerminatingCode=FALSE;
-
- // Die gelesenen Bits aus dem Eingabe-Buffer entfernen:
- nInputBitsBufSize = nInputBitsBufSize - nCodeBits;
-
- // Die Anzahl Daten-Bits in die Scanline schreiben:
- if (nDataBits>0) {
- nTargetBits = nTargetBits - nDataBits;
- if (nBlackOrWhite==0x00) *pTarget &= 0xff << nTgtFreeByteBits;
- else *pTarget |= 0xff >> (8-nTgtFreeByteBits);
- if (nDataBits<=nTgtFreeByteBits) {
- if (nDataBits==nTgtFreeByteBits) {
- pTarget++;
- nTgtFreeByteBits=8;
- }
- else nTgtFreeByteBits = nTgtFreeByteBits - nDataBits;
- }
- else {
- nDataBits = nDataBits - nTgtFreeByteBits;
- pTarget++;
- nTgtFreeByteBits=8;
- while (nDataBits>=8) {
- *(pTarget++)=nBlackOrWhite;
- nDataBits-=8;
- }
- if (nDataBits>0) {
- *pTarget=nBlackOrWhite;
- nTgtFreeByteBits = nTgtFreeByteBits - nDataBits;
- }
- }
- }
-
- // ggf. Umschaltung Black <-> White:
- if (bTerminatingCode==TRUE) nBlackOrWhite=~nBlackOrWhite;
-
- } while (nTargetBits>0 || bTerminatingCode==FALSE);
-}
-
-
-
-void CCIDecompressor::Read2DScanlineData(BYTE * pTarget, USHORT nTargetBits)
-{
- USHORT n2DMode,nBitPos,nUncomp,nRun,nRun2,nt;
- BYTE nBlackOrWhite;
-
- nBlackOrWhite=0x00;
- nBitPos=0;
-
- while (nBitPos<nTargetBits && bStatus==TRUE) {
-
- n2DMode=ReadCodeAndDecode(p2DModeLookUp,10);
- if (bStatus==FALSE) return;
-
- if (n2DMode==CCI2DMODE_UNCOMP) {
- for (;;) {
- nUncomp=ReadCodeAndDecode(pUncompLookUp,11);
- if ( nUncomp <= CCIUNCOMP_4White_1Black ) {
- nRun=nUncomp-CCIUNCOMP_0White_1Black;
- FillBits(pTarget,nTargetBits,nBitPos,nRun,0x00);
- nBitPos = nBitPos + nRun;
- FillBits(pTarget,nTargetBits,nBitPos,1,0xff);
- nBitPos++;
- }
- else if ( nUncomp == CCIUNCOMP_5White ) {
- FillBits(pTarget,nTargetBits,nBitPos,5,0x00);
- nBitPos = nBitPos + 5;
- }
- else {
- nRun=nUncomp-CCIUNCOMP_0White_End;
- FillBits(pTarget,nTargetBits,nBitPos,nRun,0x00);
- nBitPos = nBitPos + nRun;
- nBlackOrWhite=ReadBlackOrWhite();
- break;
- }
- }
- }
-
- else if (n2DMode==CCI2DMODE_PASS) {
- if (nBitPos==0 && nBlackOrWhite==0x00 && CountBits(pLastLine,nTargetBits,0,0xff)!=0) nRun=0;
- else {
- nRun=CountBits(pLastLine,nTargetBits,nBitPos,~nBlackOrWhite);
- nRun = nRun + CountBits(pLastLine,nTargetBits,nBitPos+nRun,nBlackOrWhite);
- }
- nRun = nRun + CountBits(pLastLine,nTargetBits,nBitPos+nRun,~nBlackOrWhite);
- FillBits(pTarget,nTargetBits,nBitPos,nRun,nBlackOrWhite);
- nBitPos = nBitPos + nRun;
- }
-
- else if (n2DMode==CCI2DMODE_HORZ) {
- if (nBlackOrWhite==0x00) {
- nRun=0;
- do {
- nt=ReadCodeAndDecode(pWhiteLookUp,13);
- nRun = nRun + nt;
- } while (nt>=64);
- nRun2=0;
- do {
- nt=ReadCodeAndDecode(pBlackLookUp,13);
- nRun2 = nRun2 + nt;
- } while (nt>=64);
- }
- else {
- nRun=0;
- do {
- nt=ReadCodeAndDecode(pBlackLookUp,13);
- nRun = nRun + nt;
- } while (nt>=64);
- nRun2=0;
- do {
- nt=ReadCodeAndDecode(pWhiteLookUp,13);
- nRun2 = nRun2 + nt;
- } while (nt>=64);
- }
- FillBits(pTarget,nTargetBits,nBitPos,nRun,nBlackOrWhite);
- nBitPos = nBitPos + nRun;
- FillBits(pTarget,nTargetBits,nBitPos,nRun2,~nBlackOrWhite);
- nBitPos = nBitPos + nRun2;
- }
-
- else { // Es ist einer der Modi CCI2DMODE_VERT_...
- if (nBitPos==0 && nBlackOrWhite==0x00 && CountBits(pLastLine,nTargetBits,0,0xff)!=0) nRun=0;
- else {
- nRun=CountBits(pLastLine,nTargetBits,nBitPos,~nBlackOrWhite);
- nRun = nRun + CountBits(pLastLine,nTargetBits,nBitPos+nRun,nBlackOrWhite);
- }
- nRun+=n2DMode-CCI2DMODE_VERT_0;
- FillBits(pTarget,nTargetBits,nBitPos,nRun,nBlackOrWhite);
- nBitPos = nBitPos + nRun;
- nBlackOrWhite=~nBlackOrWhite;
- }
- }
-}
-
-
diff --git a/goodies/source/filter.vcl/itiff/ccidecom.hxx b/goodies/source/filter.vcl/itiff/ccidecom.hxx
deleted file mode 100644
index a6a5512f0ddb..000000000000
--- a/goodies/source/filter.vcl/itiff/ccidecom.hxx
+++ /dev/null
@@ -1,128 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: ccidecom.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef _CCIDECOM_HXX
-#define _CCIDECOM_HXX
-
-#include <tools/stream.hxx>
-
-
-#define CCI_OPTION_2D 1 // 2D-Komprimierung (statt 1D)
-#define CCI_OPTION_EOL 2 // EOL-Codes am Ende jeder Zeile vorhanden
-#define CCI_OPTION_BYTEALIGNEOL 4 // Fuellbits vor jedem EOL-Code, so dass
- // Ende von EOL auf Bytes aligend
-#define CCI_OPTION_BYTEALIGNROW 8 // Rows beginnen immer auf Byte-Grenze
-#define CCI_OPTION_INVERSEBITORDER 16
-
-// Eintrag in eine Huffman-Tabelle:
-struct CCIHuffmanTableEntry {
- USHORT nValue; // Der Daten-Wert.
- USHORT nCode; // Der Code durch den der Daten-Wert repraesentiert wird.
- USHORT nCodeBits; // Laenge des Codes in Bits.
-};
-
-
-// Eintrag in eine Hash-Tabelle zur schnellen Dekodierung
-struct CCILookUpTableEntry {
- USHORT nValue;
- USHORT nCodeBits;
-};
-
-
-class CCIDecompressor {
-
-public:
-
- CCIDecompressor( ULONG nOptions, UINT32 nImageWidth );
- ~CCIDecompressor();
-
- void StartDecompression( SvStream & rIStream );
-
- BOOL DecompressScanline(BYTE * pTarget, ULONG nTargetBits );
-
-private:
-
- void MakeLookUp(const CCIHuffmanTableEntry * pHufTab,
- const CCIHuffmanTableEntry * pHufTabSave,
- CCILookUpTableEntry * pLookUp,
- USHORT nHuffmanTableSize,
- USHORT nMaxCodeBits);
-
- BOOL ReadEOL( UINT32 nMaxFillBits );
-
- BOOL Read2DTag();
-
- BYTE ReadBlackOrWhite();
-
- USHORT ReadCodeAndDecode(const CCILookUpTableEntry * pLookUp,
- USHORT nMaxCodeBits);
-
- void FillBits(BYTE * pTarget, USHORT nTargetBits,
- USHORT nBitPos, USHORT nNumBits,
- BYTE nBlackOrWhite);
-
- USHORT CountBits(const BYTE * pData, USHORT nDataSizeBits,
- USHORT nBitPos, BYTE nBlackOrWhite);
-
- void Read1DScanlineData(BYTE * pTarget, USHORT nTargetBits);
-
- void Read2DScanlineData(BYTE * pTarget, USHORT nTargetBits);
-
- BOOL bTableBad;
-
- BOOL bStatus;
-
- BYTE* pByteSwap;
-
- SvStream * pIStream;
-
- UINT32 nEOLCount;
-
- UINT32 nWidth;
-
- ULONG nOptions;
-
- BOOL bFirstEOL;
-
- CCILookUpTableEntry * pWhiteLookUp;
- CCILookUpTableEntry * pBlackLookUp;
- CCILookUpTableEntry * p2DModeLookUp;
- CCILookUpTableEntry * pUncompLookUp;
-
- ULONG nInputBitsBuf;
- USHORT nInputBitsBufSize;
-
- BYTE * pLastLine;
- ULONG nLastLineSize;
-};
-
-
-#endif
-
diff --git a/goodies/source/filter.vcl/itiff/exports.map b/goodies/source/filter.vcl/itiff/exports.map
deleted file mode 100644
index 983df223406e..000000000000
--- a/goodies/source/filter.vcl/itiff/exports.map
+++ /dev/null
@@ -1,7 +0,0 @@
-TIFIMPORTER_1_0 {
- global:
- GraphicImport;
-
- local:
- *;
-};
diff --git a/goodies/source/filter.vcl/itiff/itiff.cxx b/goodies/source/filter.vcl/itiff/itiff.cxx
deleted file mode 100644
index 0db2ace9373c..000000000000
--- a/goodies/source/filter.vcl/itiff/itiff.cxx
+++ /dev/null
@@ -1,1345 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: itiff.cxx,v $
- * $Revision: 1.16 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_goodies.hxx"
-#include <vcl/graph.hxx>
-#include <vcl/bmpacc.hxx>
-#ifndef _SV_FLTCALL_HXX
-#include <svtools/fltcall.hxx>
-#endif
-#include <vcl/animate.hxx>
-#include "lzwdecom.hxx"
-#include "ccidecom.hxx"
-
-#define OOODEBUG(str,Num) //(InfoBox(NULL,String(str)+String(" ")+String(Num)).Execute();
-
-namespace {
-
-template< typename T > T BYTESWAP(T nByte) {
- return ( nByte << 7 ) | ( ( nByte & 2 ) << 5 ) | ( ( nByte & 4 ) << 3 ) |
- ( ( nByte & 8 ) << 1 ) | ( ( nByte & 16 ) >> 1 ) |
- ( ( nByte & 32 ) >> 3 ) | ( ( nByte & 64 ) >> 5 ) |
- ( ( nByte & 128 ) >> 7 );
-}
-
-}
-
-//============================ TIFFReader ==================================
-
-class TIFFReader
-{
-
-private:
-
- BOOL bStatus; // Ob bisher kein Fehler auftrat
- Animation aAnimation;
- ULONG nLastPercent;
-
- SvStream* pTIFF; // Die einzulesende TIFF-Datei
- Bitmap aBitmap;
- BitmapWriteAccess* pAcc;
- USHORT nDstBitsPerPixel;
-
- ULONG nOrigPos; // Anfaengliche Position in pTIFF
- UINT16 nOrigNumberFormat; // Anfaengliches Nummern-Format von pTIFF
-
-
- UINT16 nDataType;
- // Daten, die aus dem TIFF-Tags entnommen werden:
- BOOL bByteSwap; // TRUE wenn bits 0..7 -> 7..0 invertiert werden sollen ( FILLORDER = 2 );
- BYTE nByte1; // 'I', wenn Format LittleEndian
-
- ULONG nNewSubFile; //
- ULONG nSubFile; //
- ULONG nImageWidth; // Bildbreite in Pixel
- ULONG nImageLength; // Bildhoehe in Pixel
- ULONG nBitsPerSample; // Bits pro Pixel pro Ebene
- ULONG nCompression; // Art der Kompriemierung
- ULONG nPhotometricInterpretation; //
- ULONG nThresholding; //
- ULONG nCellWidth; //
- ULONG nCellLength; //
- ULONG nFillOrder; //
- ULONG* pStripOffsets; // Feld von Offsets zu den Bitmap-Daten-"Strips"
- ULONG nNumStripOffsets; // Groesse obigen Feldes
- ULONG nOrientation; //
- ULONG nSamplesPerPixel; // Anzahl der Ebenen
- ULONG nRowsPerStrip; // Wenn nicht komprimiert: Zahl der Zeilen pro Strip
- ULONG* pStripByteCounts; // Wenn komprimiert (bestimmte Art): Groesse der Strips
- ULONG nNumStripByteCounts; // Anzahl der Eintraege in obiges Feld
- ULONG nMinSampleValue; //
- ULONG nMaxSampleValue; //
- double fXResolution; // X-Aufloesung oder 0.0
- double fYResolution; // Y-Aufloesung oder 0.0
- ULONG nPlanarConfiguration; //
- ULONG nGroup3Options; //
- ULONG nGroup4Options; //
- ULONG nResolutionUnit; // Einheit von fX/YResolution: 1=unbekannt, 2(default)=Zoll, 3=cm
- ULONG nPredictor; //
- ULONG* pColorMap; // Farb-Palette
- ULONG nNumColors; // Anzahl Farben in der Farbpalette
-
- ULONG nPlanes; // Anzahl der Ebenen in der Tiff-Datei
- ULONG nStripsPerPlane; // Anzahl der Strips pro Ebene
- ULONG nBytesPerRow; // Bytes pro Zeile pro Ebene in der Tiff-Datei ( unkomprimiert )
- BYTE* pMap[ 4 ]; // Temporaere Scanline
-
-
- void MayCallback( ULONG nPercent );
-
- ULONG DataTypeSize();
- ULONG ReadIntData();
- double ReadDoubleData();
-
- void ReadHeader();
- void ReadTagData( USHORT nTagType, sal_uInt32 nDataLen );
-
- BOOL ReadMap( ULONG nMinPercent, ULONG nMaxPercent );
- // Liesst/dekomprimert die Bitmap-Daten, und fuellt pMap
-
- ULONG GetBits( const BYTE * pSrc, ULONG nBitsPos, ULONG nBitsCount );
- // Holt nBitsCount Bits aus pSrc[..] an der Bit-Position nBitsPos
-
- void MakePalCol( void );
- // Erzeugt die Bitmap aus der temporaeren Bitmap pMap
- // und loescht dabei pMap teilweise
- BOOL ConvertScanline( ULONG nY );
- // Konvertiert eine Scanline in das Windows-BMP-Format
-
-public:
-
- TIFFReader() {}
- ~TIFFReader() {}
-
- BOOL ReadTIFF( SvStream & rTIFF, Graphic & rGraphic );
-};
-
-//=================== Methoden von TIFFReader ==============================
-
-void TIFFReader::MayCallback( ULONG /*nPercent*/ )
-{
-/*
- if ( nPercent >= nLastPercent + 3 )
- {
- nLastPercent=nPercent;
- if ( pCallback != NULL && nPercent <= 100 && bStatus == TRUE )
- {
- if (((*pCallback)(pCallerData,(USHORT)nPercent)) == TRUE )
- bStatus = FALSE;
- }
- }
-*/
-}
-
-// ---------------------------------------------------------------------------------
-
-ULONG TIFFReader::DataTypeSize()
-{
- ULONG nSize;
- switch ( nDataType )
- {
- case 1 : // BYTE
- case 2 : // ACSII
- case 6 : // SIGNED Byte
- case 7 : // UNDEFINED
- nSize = 1;
- break;
- case 3 : // UINT16
- case 8 : // INT16
- nSize = 2;
- break;
- case 4 : // UINT32
- case 9 : // INT32
- case 11 : // FLOAT
- nSize = 4;
- break;
- case 5 : // RATIONAL
- case 10 : // SIGNED RATINAL
- case 12 : // DOUBLE
- nSize = 8;
- break;
- default:
- pTIFF->SetError(SVSTREAM_FILEFORMAT_ERROR);
- nSize=1;
- }
- return nSize;
-}
-
-// ---------------------------------------------------------------------------------
-
-ULONG TIFFReader::ReadIntData()
-{
- double nDOUBLE;
- float nFLOAT;
- UINT32 nUINT32a, nUINT32b;
- INT32 nINT32;
- UINT16 nUINT16;
- INT16 nINT16;
- BYTE nBYTE;
- char nCHAR;
-
- switch( nDataType )
- {
- case 0 : //??
- case 1 :
- case 2 :
- case 7 :
- *pTIFF >> nBYTE;
- nUINT32a = (ULONG)nBYTE;
- break;
- case 3 :
- *pTIFF >> nUINT16;
- nUINT32a = (ULONG)nUINT16;
- break;
- case 9 :
- case 4 :
- *pTIFF >> nUINT32a;
- break;
- case 5 :
- *pTIFF >> nUINT32a >> nUINT32b;
- if ( nUINT32b != 0 )
- nUINT32a /= nUINT32b;
- break;
- case 6 :
- *pTIFF >> nCHAR;
- nUINT32a = (INT32)nCHAR;
- break;
- case 8 :
- *pTIFF >> nINT16;
- nUINT32a = (INT32)nINT16;
- break;
- case 10 :
- *pTIFF >> nUINT32a >> nINT32;
- if ( nINT32 != 0 )
- nUINT32a /= nINT32;
- break;
- case 11 :
- *pTIFF >> nFLOAT;
- nUINT32a = (INT32)nFLOAT;
- break;
- case 12 :
- *pTIFF >> nDOUBLE;
- nUINT32a = (INT32)nDOUBLE;
- break;
- default:
- *pTIFF >> nUINT32a;
- break;
- }
- return nUINT32a;
-}
-
-// ---------------------------------------------------------------------------------
-
-double TIFFReader::ReadDoubleData()
-{
- sal_uInt32 nulong;
- double nd;
-
- if ( nDataType == 5 )
- {
- *pTIFF >> nulong;
- nd = (double)nulong;
- *pTIFF >> nulong;
- if ( nulong != 0 )
- nd /= (double)nulong;
- }
- else
- nd = (double)ReadIntData();
- return nd;
-}
-
-// ---------------------------------------------------------------------------------
-
-void TIFFReader::ReadTagData( USHORT nTagType, sal_uInt32 nDataLen)
-{
- if ( bStatus == FALSE )
- return;
-
- switch ( nTagType )
- {
- case 0x00fe: // New Sub File
- nNewSubFile = ReadIntData();
- OOODEBUG("NewSubFile",nNewSubFile);
- break;
-
- case 0x00ff: // Sub File
- nSubFile = ReadIntData();
- OOODEBUG("SubFile",nSubFile);
- break;
-
- case 0x0100: // Image Width
- nImageWidth = ReadIntData();
- OOODEBUG("ImageWidth",nImageWidth);
- break;
-
- case 0x0101: // Image Length
- nImageLength = ReadIntData();
- OOODEBUG("ImageLength",nImageLength);
- break;
-
- case 0x0102: // Bits Per Sample
- nBitsPerSample = ReadIntData();
- OOODEBUG("BitsPerSample",nBitsPerSample);
- break;
-
- case 0x0103: // Compression
- nCompression = ReadIntData();
- OOODEBUG("Compression",nCompression);
- break;
-
- case 0x0106: // Photometric Interpreation
- nPhotometricInterpretation = ReadIntData();
- OOODEBUG("PhotometricInterpretation",nPhotometricInterpretation);
- break;
-
- case 0x0107: // Thresholding
- nThresholding = ReadIntData();
- OOODEBUG("Thresholding",nThresholding);
- break;
-
- case 0x0108: // Cell Width
- nCellWidth = ReadIntData();
- break;
-
- case 0x0109: // Cell Length
- nCellLength = ReadIntData();
- break;
-
- case 0x010a: // Fill Order
- nFillOrder = ReadIntData();
- OOODEBUG("FillOrder",nFillOrder);
- break;
-
- case 0x0111: { // Strip Offset(s)
- ULONG nOldNumSO, i, * pOldSO;
- pOldSO = pStripOffsets;
- if ( pOldSO == NULL )
- nNumStripOffsets = 0;
- nOldNumSO = nNumStripOffsets;
- nDataLen += nOldNumSO;
- if ( ( nDataLen > nOldNumSO ) && ( nDataLen < SAL_MAX_UINT32 / sizeof( sal_uInt32 ) ) )
- {
- nNumStripOffsets = nDataLen;
- try
- {
- pStripOffsets = new ULONG[ nNumStripOffsets ];
- }
- catch (std::bad_alloc)
- {
- pStripOffsets = NULL;
- nNumStripOffsets = 0;
- }
- if ( pStripOffsets )
- {
- for ( i = 0; i < nOldNumSO; i++ )
- pStripOffsets[ i ] = pOldSO[ i ] + nOrigPos;
- for ( i = nOldNumSO; i < nNumStripOffsets; i++ )
- pStripOffsets[ i ] = ReadIntData() + nOrigPos;
- }
- delete[] pOldSO;
- }
- OOODEBUG("StripOffsets (Anzahl:)",nDataLen);
- break;
- }
- case 0x0112: // Orientation
- nOrientation = ReadIntData();
- OOODEBUG("Orientation",nOrientation);
- break;
-
- case 0x0115: // Samples Per Pixel
- nSamplesPerPixel = ReadIntData();
- OOODEBUG("SamplesPerPixel",nSamplesPerPixel);
- break;
-
- case 0x0116: // Rows Per Strip
- nRowsPerStrip = ReadIntData();
- OOODEBUG("RowsPerStrip",nRowsPerStrip);
- break;
-
- case 0x0117: { // Strip Byte Counts
- ULONG nOldNumSBC, i, * pOldSBC;
- pOldSBC = pStripByteCounts;
- if ( pOldSBC == NULL )
- nNumStripByteCounts = 0; // Sicherheitshalber
- nOldNumSBC = nNumStripByteCounts;
- nDataLen += nOldNumSBC;
- if ( ( nDataLen > nOldNumSBC ) && ( nDataLen < SAL_MAX_UINT32 / sizeof( sal_uInt32 ) ) )
- {
- nNumStripByteCounts = nDataLen;
- try
- {
- pStripByteCounts = new ULONG[ nNumStripByteCounts ];
- }
- catch (std::bad_alloc)
- {
- pStripByteCounts = NULL;
- nNumStripByteCounts = 0;
- }
- if ( pStripByteCounts )
- {
- for ( i = 0; i < nOldNumSBC; i++ )
- pStripByteCounts[ i ] = pOldSBC[ i ];
- for ( i = nOldNumSBC; i < nNumStripByteCounts; i++)
- pStripByteCounts[ i ] = ReadIntData();
- }
- delete[] pOldSBC;
- }
- OOODEBUG("StripByteCounts (Anzahl:)",nDataLen);
- break;
- }
- case 0x0118: // Min Sample Value
- nMinSampleValue = ReadIntData();
- OOODEBUG("MinSampleValue",nMinSampleValue);
- break;
-
- case 0x0119: // Max Sample Value
- nMaxSampleValue = ReadIntData();
- OOODEBUG("MaxSampleValue",nMaxSampleValue);
- break;
-
- case 0x011a: // X Resolution
- fXResolution = ReadDoubleData();
- break;
-
- case 0x011b: // Y Resolution
- fYResolution = ReadDoubleData();
- break;
-
- case 0x011c: // Planar Configuration
- nPlanarConfiguration = ReadIntData();
- OOODEBUG("PlanarConfiguration",nPlanarConfiguration);
- break;
-
- case 0x0124: // Group 3 Options
- nGroup3Options = ReadIntData();
- OOODEBUG("Group3Options",nGroup3Options);
- break;
-
- case 0x0125: // Group 4 Options
- nGroup4Options = ReadIntData();
- OOODEBUG("Group4Options",nGroup4Options);
- break;
-
- case 0x0128: // Resolution Unit
- nResolutionUnit = ReadIntData();
- break;
-
- case 0x013d: // Predictor
- nPredictor = ReadIntData();
- OOODEBUG("Predictor",nPredictor);
- break;
-
- case 0x0140: { // Color Map
- USHORT nVal;
- ULONG i;
- nNumColors= ( 1 << nBitsPerSample );
- if ( nDataType == 3 && nNumColors <= 256)
- {
- pColorMap = new ULONG[ 256 ];
- for ( i = 0; i < nNumColors; i++ )
- pColorMap[ i ] = 0;
- for ( i = 0; i < nNumColors; i++ )
- {
- *pTIFF >> nVal;
- pColorMap[ i ] |= ( ( (ULONG)nVal ) << 8 ) & 0x00ff0000;
- }
- for ( i = 0; i < nNumColors; i++ )
- {
- *pTIFF >> nVal;
- pColorMap[ i ] |= ( (ULONG)nVal ) & 0x0000ff00;
- }
- for ( i = 0; i < nNumColors; i++ )
- {
- *pTIFF >> nVal;
- pColorMap[ i ] |= ( ( (ULONG)nVal ) >> 8 ) & 0x000000ff;
- }
- }
- else
- bStatus = FALSE;
- OOODEBUG("ColorMap (Anzahl Farben:)", nNumColors);
- break;
- }
- }
-
- if ( pTIFF->GetError() )
- bStatus = FALSE;
-}
-
-// ---------------------------------------------------------------------------------
-
-BOOL TIFFReader::ReadMap( ULONG nMinPercent, ULONG nMaxPercent )
-{
- if ( nCompression == 1 || nCompression == 32771 )
- {
- ULONG ny, np, nStrip, nStripBytesPerRow;
-
- if ( nCompression == 1 )
- nStripBytesPerRow = nBytesPerRow;
- else
- nStripBytesPerRow = ( nBytesPerRow + 1 ) & 0xfffffffe;
- for ( ny = 0; ny < nImageLength; ny++ )
- {
- for ( np = 0; np < nPlanes; np++ )
- {
- nStrip = ny / nRowsPerStrip + np * nStripsPerPlane;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek( pStripOffsets[ nStrip ] + ( ny % nRowsPerStrip ) * nStripBytesPerRow );
- pTIFF->Read( pMap[ np ], nBytesPerRow );
- if ( pTIFF->GetError() )
- return FALSE;
- MayCallback( nMinPercent + ( nMaxPercent - nMinPercent ) * ( np * nImageLength + ny) / ( nImageLength * nPlanes ) );
- }
- if ( !ConvertScanline( ny ) )
- return FALSE;
- }
- }
- else if ( nCompression == 2 || nCompression == 3 || nCompression == 4 )
- {
- ULONG ny, np, nStrip, nOptions;
- if ( nCompression == 2 )
- {
- nOptions = CCI_OPTION_BYTEALIGNROW;
- }
- else if ( nCompression == 3 )
- {
- nOptions = CCI_OPTION_EOL;
- if ( nGroup3Options & 0x00000001 )
- nOptions |= CCI_OPTION_2D;
- if ( nGroup3Options & 0x00000004 )
- nOptions |= CCI_OPTION_BYTEALIGNEOL;
- if ( nGroup3Options & 0xfffffffa )
- return FALSE;
- }
- else
- { // nCompression==4
- nOptions = CCI_OPTION_2D;
- if ( nGroup4Options & 0xffffffff )
- return FALSE;
- }
- if ( nFillOrder == 2 )
- {
- nOptions |= CCI_OPTION_INVERSEBITORDER;
- bByteSwap = FALSE;
- }
- nStrip = 0;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek(pStripOffsets[nStrip]);
-
- CCIDecompressor aCCIDecom( nOptions, nImageWidth );
-
- aCCIDecom.StartDecompression( *pTIFF );
-
- for ( ny = 0; ny < nImageLength; ny++ )
- {
- for ( np = 0; np < nPlanes; np++ )
- {
- if ( ny / nRowsPerStrip + np * nStripsPerPlane > nStrip )
- {
- nStrip=ny/nRowsPerStrip+np*nStripsPerPlane;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek( pStripOffsets[ nStrip ] );
- aCCIDecom.StartDecompression( *pTIFF );
- }
- if ( aCCIDecom.DecompressScanline( pMap[ np ], nImageWidth * nBitsPerSample * nSamplesPerPixel / nPlanes ) == FALSE )
- return FALSE;
- if ( pTIFF->GetError() )
- return FALSE;
- MayCallback(nMinPercent+(nMaxPercent-nMinPercent)*(np*nImageLength+ny)/(nImageLength*nPlanes));
- }
- if ( !ConvertScanline( ny ) )
- return FALSE;
- }
- }
- else if ( nCompression == 5 )
- {
- LZWDecompressor aLZWDecom;
- ULONG ny, np, nStrip;
- nStrip=0;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek(pStripOffsets[nStrip]);
- aLZWDecom.StartDecompression(*pTIFF);
- for ( ny = 0; ny < nImageLength; ny++ )
- {
- for ( np = 0; np < nPlanes; np++ )
- {
- if ( ny / nRowsPerStrip + np * nStripsPerPlane > nStrip )
- {
- nStrip = ny / nRowsPerStrip + np * nStripsPerPlane;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek(pStripOffsets[nStrip]);
- aLZWDecom.StartDecompression(*pTIFF);
- }
- if ( ( aLZWDecom.Decompress( pMap[ np ], nBytesPerRow ) != nBytesPerRow ) || pTIFF->GetError() )
- return FALSE;
- MayCallback(nMinPercent+(nMaxPercent-nMinPercent)*(np*nImageLength+ny)/(nImageLength*nPlanes));
- }
- if ( !ConvertScanline( ny ) )
- return FALSE;
- }
- }
- else if ( nCompression == 32773 )
- {
- ULONG nStrip,nRecCount,nRowBytesLeft,ny,np,i;
- BYTE * pdst, nRecHeader, nRecData;
- nStrip = 0;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek(pStripOffsets[nStrip]);
- for ( ny = 0; ny < nImageLength; ny++ )
- {
- for ( np = 0; np < nPlanes; np++ )
- {
- if ( ny / nRowsPerStrip + np * nStripsPerPlane > nStrip )
- {
- nStrip=ny/nRowsPerStrip+np*nStripsPerPlane;
- if ( nStrip >= nNumStripOffsets )
- return FALSE;
- pTIFF->Seek(pStripOffsets[nStrip]);
- }
- nRowBytesLeft = nBytesPerRow;
- pdst=pMap[ np ];
- do
- {
- *pTIFF >> nRecHeader;
- if ((nRecHeader&0x80)==0)
- {
- nRecCount=0x00000001+((ULONG)nRecHeader);
- if ( nRecCount > nRowBytesLeft )
- return FALSE;
- pTIFF->Read(pdst,nRecCount);
- pdst+=nRecCount;
- nRowBytesLeft-=nRecCount;
- }
- else if ( nRecHeader != 0x80 )
- {
- nRecCount = 0x000000101 - ( (ULONG)nRecHeader );
- if ( nRecCount > nRowBytesLeft )
- {
- nRecCount = nRowBytesLeft;
-
-// bStatus = FALSE;
-// return;
-
- }
- *pTIFF >> nRecData;
- for ( i = 0; i < nRecCount; i++ )
- *(pdst++) = nRecData;
- nRowBytesLeft -= nRecCount;
- }
- } while ( nRowBytesLeft != 0 );
- if ( pTIFF->GetError() )
- return FALSE;
- MayCallback(nMinPercent+(nMaxPercent-nMinPercent)*(np*nImageLength+ny)/(nImageLength*nPlanes));
- }
- if ( !ConvertScanline( ny ) )
- return FALSE;
- }
- }
- else
- return FALSE;
- return TRUE;
-}
-
-ULONG TIFFReader::GetBits( const BYTE * pSrc, ULONG nBitsPos, ULONG nBitsCount )
-{
- ULONG nRes;
- if ( bByteSwap )
- {
- pSrc += ( nBitsPos >> 3 );
- nBitsPos &= 7;
- BYTE nDat = *pSrc;
- nRes = (ULONG)( BYTESWAP( nDat ) & ( 0xff >> nBitsPos ) );
-
- if ( nBitsCount <= 8 - nBitsPos )
- {
- nRes >>= ( 8 - nBitsPos - nBitsCount );
- }
- else
- {
- pSrc++;
- nBitsCount -= 8 - nBitsPos;
- while ( nBitsCount >= 8 )
- {
- nDat = *(pSrc++);
- nRes = ( nRes << 8 ) | ((ULONG)BYTESWAP( nDat ) );
- nBitsCount -= 8;
- }
- if ( nBitsCount > 0 )
- {
- nDat = *pSrc;
- nRes = ( nRes << nBitsCount ) | (((ULONG)BYTESWAP(nDat))>>(8-nBitsCount));
- }
- }
- }
- else
- {
- pSrc += ( nBitsPos >> 3 );
- nBitsPos &= 7;
- nRes = (ULONG)((*pSrc)&(0xff>>nBitsPos));
- if ( nBitsCount <= 8 - nBitsPos )
- {
- nRes >>= ( 8 - nBitsPos - nBitsCount );
- }
- else
- {
- pSrc++;
- nBitsCount -= 8 - nBitsPos;
- while ( nBitsCount >= 8 )
- {
- nRes = ( nRes << 8 ) | ((ULONG)*(pSrc++));
- nBitsCount -= 8;
- }
- if ( nBitsCount > 0 )
- nRes = ( nRes << nBitsCount ) | (((ULONG)*pSrc)>>(8-nBitsCount));
- }
- }
- return nRes;
-}
-
-// ---------------------------------------------------------------------------------
-
-BOOL TIFFReader::ConvertScanline( ULONG nY )
-{
- UINT32 nRed, nGreen, nBlue, ns, nx, nVal, nByteCount;
- BYTE nByteVal;
-
- if ( nDstBitsPerPixel == 24 )
- {
- if ( nBitsPerSample == 8 && nSamplesPerPixel >= 3 &&
- nPlanes == 1 && nPhotometricInterpretation == 2 )
- {
- BYTE* pt = pMap[ 0 ];
-
- // sind die Werte als Differenz abgelegt?
- if ( 2 == nPredictor )
- {
- BYTE nLRed = 0;
- BYTE nLGreen = 0;
- BYTE nLBlue = 0;
- for ( nx = 0; nx < nImageWidth; nx++, pt += nSamplesPerPixel )
- {
- nLRed = nLRed + pt[ 0 ];
- nLGreen = nLGreen + pt[ 1 ];
- nLBlue = nLBlue + pt[ 2 ];
- pAcc->SetPixel( nY, nx, Color( nLRed, nLGreen, nLBlue ) );
- }
- }
- else
- {
- for ( nx = 0; nx < nImageWidth; nx++, pt += nSamplesPerPixel )
- {
- pAcc->SetPixel( nY, nx, Color( pt[0], pt[1], pt[2] ) );
- }
- }
- }
- else if ( nPhotometricInterpretation == 2 && nSamplesPerPixel >= 3 )
- {
- ULONG nMinMax = nMinSampleValue * 255 / ( nMaxSampleValue - nMinSampleValue );
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- if ( nPlanes < 3 )
- {
- nRed = GetBits( pMap[ 0 ], ( nx * nSamplesPerPixel + 0 ) * nBitsPerSample, nBitsPerSample );
- nGreen = GetBits( pMap[ 1 ], ( nx * nSamplesPerPixel + 1 ) * nBitsPerSample, nBitsPerSample );
- nBlue = GetBits( pMap[ 2 ], ( nx * nSamplesPerPixel + 2 ) * nBitsPerSample, nBitsPerSample );
- }
- else
- {
- nRed = GetBits( pMap[ 0 ], nx * nBitsPerSample, nBitsPerSample );
- nGreen = GetBits( pMap[ 1 ], nx * nBitsPerSample, nBitsPerSample );
- nBlue = GetBits( pMap[ 2 ], nx * nBitsPerSample, nBitsPerSample );
- }
- pAcc->SetPixel( nY, nx, Color( (BYTE)( nRed - nMinMax ), (BYTE)( nGreen - nMinMax ), (BYTE)(nBlue - nMinMax) ) );
- }
- }
- else if ( nPhotometricInterpretation == 5 && nSamplesPerPixel == 3 )
- {
- ULONG nMinMax = nMinSampleValue * 255 / ( nMaxSampleValue - nMinSampleValue );
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- if ( nPlanes < 3 )
- {
- nRed = GetBits( pMap[ 0 ],( nx * nSamplesPerPixel + 0 ) * nBitsPerSample, nBitsPerSample );
- nGreen = GetBits( pMap[ 0 ],( nx * nSamplesPerPixel + 1 ) * nBitsPerSample, nBitsPerSample );
- nBlue = GetBits( pMap[ 0 ],( nx * nSamplesPerPixel + 2 ) * nBitsPerSample, nBitsPerSample );
- }
- else
- {
- nRed = GetBits( pMap[ 0 ], nx * nBitsPerSample, nBitsPerSample );
- nGreen = GetBits( pMap[ 1 ], nx * nBitsPerSample, nBitsPerSample );
- nBlue = GetBits( pMap[ 2 ], nx * nBitsPerSample, nBitsPerSample );
- }
- nRed = 255 - (BYTE)( nRed - nMinMax );
- nGreen = 255 - (BYTE)( nGreen - nMinMax );
- nBlue = 255 - (BYTE)( nBlue - nMinMax );
- pAcc->SetPixel( nY, nx, Color( (BYTE) nRed, (BYTE) nGreen, (BYTE) nBlue ) );
- }
- }
- else if( nPhotometricInterpretation == 5 && nSamplesPerPixel == 4 )
- {
- BYTE nSamp[ 4 ];
- BYTE nSampLast[ 4 ] = { 0, 0, 0, 0 };
- long nBlack;
-
- for( nx = 0; nx < nImageWidth; nx++ )
- {
- // sind die Werte als Differenz abgelegt?
- if( 2 == nPredictor )
- {
- for( ns = 0; ns < 4; ns++ )
- {
- if( nPlanes < 3 )
- nSampLast[ ns ] = nSampLast[ ns ] + (BYTE) GetBits( pMap[ 0 ], ( nx * nSamplesPerPixel + ns ) * nBitsPerSample, nBitsPerSample );
- else
- nSampLast[ ns ] = nSampLast[ ns ] + (BYTE) GetBits( pMap[ ns ], nx * nBitsPerSample, nBitsPerSample );
- nSamp[ ns ] = nSampLast[ ns ];
- }
- }
- else
- {
- for( ns = 0; ns < 4; ns++ )
- {
- if( nPlanes < 3 )
- nSamp[ ns ] = (BYTE) GetBits( pMap[ 0 ], ( nx * nSamplesPerPixel + ns ) * nBitsPerSample, nBitsPerSample );
- else
- nSamp[ ns ]= (BYTE) GetBits( pMap[ ns ], nx * nBitsPerSample, nBitsPerSample );
- }
- }
- nBlack = nSamp[ 3 ];
- nRed = (BYTE) Max( 0L, 255L - ( ( (long) nSamp[ 0 ] + nBlack - ( ( (long) nMinSampleValue ) << 1 ) ) *
- 255L/(long)(nMaxSampleValue-nMinSampleValue) ) );
- nGreen = (BYTE) Max( 0L, 255L - ( ( (long) nSamp[ 1 ] + nBlack - ( ( (long) nMinSampleValue ) << 1 ) ) *
- 255L/(long)(nMaxSampleValue-nMinSampleValue) ) );
- nBlue = (BYTE) Max( 0L, 255L - ( ( (long) nSamp[ 2 ] + nBlack - ( ( (long) nMinSampleValue ) << 1 ) ) *
- 255L/(long)(nMaxSampleValue-nMinSampleValue) ) );
- pAcc->SetPixel( nY, nx, Color ( (BYTE)nRed, (BYTE)nGreen, (BYTE)nBlue ) );
-
- }
- }
- }
- else if ( nSamplesPerPixel == 1 && ( nPhotometricInterpretation <= 1 || nPhotometricInterpretation == 3 ) )
- {
- ULONG nMinMax = ( ( 1 << nDstBitsPerPixel ) - 1 ) / ( nMaxSampleValue - nMinSampleValue );
- BYTE* pt = pMap[ 0 ];
- BYTE nShift;
-
- switch ( nDstBitsPerPixel )
- {
- case 8 :
- {
- BYTE nLast;
- if ( bByteSwap )
- {
- if ( nPredictor == 2 )
- {
- nLast = BYTESWAP( (BYTE)*pt++ );
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- pAcc->SetPixel( nY, nx, nLast );
- nLast = nLast + *pt++;
- }
- }
- else
- {
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- nLast = *pt++;
- pAcc->SetPixel( nY, nx, (BYTE)( ( (BYTESWAP((ULONG)nLast ) - nMinSampleValue ) * nMinMax ) ) );
- }
- }
- }
- else
- {
- if ( nPredictor == 2 )
- {
- nLast = *pt++;
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- pAcc->SetPixel( nY, nx, nLast );
- nLast = nLast + *pt++;
- }
- }
- else
- {
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- pAcc->SetPixel( nY, nx, (BYTE)( ( (ULONG)*pt++ - nMinSampleValue ) * nMinMax ) );
-
- }
- }
- }
- }
- break;
-
- case 7 :
- case 6 :
- case 5 :
- case 4 :
- case 3 :
- case 2 :
- {
- for ( nx = 0; nx < nImageWidth; nx++ )
- {
- nVal = ( GetBits( pt, nx * nBitsPerSample, nBitsPerSample ) - nMinSampleValue ) * nMinMax;
- pAcc->SetPixel( nY, nx, (BYTE)nVal );
- }
- }
- break;
-
- case 1 :
- {
- if ( bByteSwap )
- {
- nx = 0;
- nByteCount = ( nImageWidth >> 3 ) + 1;
- while ( --nByteCount )
- {
- nByteVal = *pt++;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, nx++, nByteVal );
- }
- if ( nImageWidth & 7 )
- {
- nByteVal = *pt++;
- while ( nx < nImageWidth )
- {
- pAcc->SetPixel( nY, nx++, nByteVal & 1 );
- nByteVal >>= 1;
- }
- }
- }
- else
- {
- nx = 7;
- nByteCount = ( nImageWidth >> 3 ) + 1;
- while ( --nByteCount )
- {
- nByteVal = *pt++;
- pAcc->SetPixel( nY, nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal & 1 );
- nByteVal >>= 1;
- pAcc->SetPixel( nY, --nx, nByteVal );
- nx += 15;
- }
- if ( nImageWidth & 7 )
- {
- nx -= 7;
- nByteVal = *pt++;
- nShift = 7;
- while ( nx < nImageWidth )
- {
- pAcc->SetPixel( nY, nx++, ( nByteVal >> nShift ) & 1);
- }
- }
- }
- }
- break;
-
- default :
- return FALSE;
- }
- }
- else if ( ( nSamplesPerPixel == 2 ) && ( nBitsPerSample == 8 ) &&
- ( nPlanarConfiguration == 1 ) && ( pColorMap == 0 ) ) // grayscale
- {
- ULONG nMinMax = ( ( 1 << 8 /*nDstBitsPerPixel*/ ) - 1 ) / ( nMaxSampleValue - nMinSampleValue );
- BYTE* pt = pMap[ 0 ];
- if ( nByte1 == 'I' )
- pt++;
- for ( nx = 0; nx < nImageWidth; nx++, pt += 2 )
- {
- pAcc->SetPixel( nY, nx, (BYTE)( ( (ULONG)*pt - nMinSampleValue ) * nMinMax ) );
- }
- }
- else
- return FALSE;
- return TRUE;
-}
-
-// ---------------------------------------------------------------------------------
-
-void TIFFReader::MakePalCol( void )
-{
- if ( nDstBitsPerPixel <= 8 )
- {
- ULONG i, nVal, n0RGB;
- if ( pColorMap == NULL )
- pColorMap = new ULONG[ 256 ];
- if ( nPhotometricInterpretation <= 1 )
- {
- nNumColors = 1 << nBitsPerSample;
- if ( nNumColors > 256 )
- nNumColors = 256;
- pAcc->SetPaletteEntryCount( (USHORT)nNumColors );
- for ( i = 0; i < nNumColors; i++ )
- {
- nVal = ( i * 255 / ( nNumColors - 1 ) ) & 0xff;
- n0RGB = nVal | ( nVal << 8 ) | ( nVal << 16 );
- if ( nPhotometricInterpretation == 1 )
- pColorMap[ i ] = n0RGB;
- else
- pColorMap[ nNumColors - i - 1 ] = n0RGB;
- }
- }
- for ( i = 0; i < nNumColors; i++ )
- {
- pAcc->SetPaletteColor( (USHORT)i, BitmapColor( (BYTE)( pColorMap[ i ] >> 16 ),
- (BYTE)( pColorMap[ i ] >> 8 ), (BYTE)pColorMap[ i ] ) );
- }
- }
-
- if ( fXResolution > 1.0 && fYResolution > 1.0 && ( nResolutionUnit == 2 || nResolutionUnit == 3 ) )
- {
- ULONG nRX,nRY;
- if (nResolutionUnit==2)
- {
- nRX=(ULONG)(fXResolution+0.5);
- nRY=(ULONG)(fYResolution+0.5);
- }
- else
- {
- nRX=(ULONG)(fXResolution*2.54+0.5);
- nRY=(ULONG)(fYResolution*2.54+0.5);
- }
- MapMode aMapMode(MAP_INCH,Point(0,0),Fraction(1,nRX),Fraction(1,nRY));
- aBitmap.SetPrefMapMode(aMapMode);
- aBitmap.SetPrefSize(Size(nImageWidth,nImageLength));
- }
-}
-
-// ---------------------------------------------------------------------------------
-
-void TIFFReader::ReadHeader()
-{
- BYTE nbyte1, nbyte2;
- USHORT nushort;
-
- *pTIFF >> nbyte1;
- if ( nbyte1 == 'I' )
- pTIFF->SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN );
- else
- pTIFF->SetNumberFormatInt( NUMBERFORMAT_INT_BIGENDIAN );
-
- *pTIFF >> nbyte2 >> nushort;
- if ( nbyte1 != nbyte2 || ( nbyte1 != 'I' && nbyte1 != 'M' ) || nushort != 0x002a )
- bStatus = FALSE;
-}
-
-// ---------------------------------------------------------------------------------
-
-BOOL TIFFReader::ReadTIFF(SvStream & rTIFF, Graphic & rGraphic )
-{
- USHORT i, nNumTags, nTagType;
- ULONG nMaxPos;
- ULONG nPos;
- sal_uInt32 nFirstIfd, nDataLen;
-
- bStatus = TRUE;
- nLastPercent = 0;
-
- pTIFF = &rTIFF;
- nMaxPos = nOrigPos = pTIFF->Tell();
- nOrigNumberFormat = pTIFF->GetNumberFormatInt();
-
- MayCallback( 0 );
-
- // Kopf einlesen:
- ReadHeader();
-
- // Ersten IFD einlesen:
- *pTIFF >> nFirstIfd;
-
- if( !nFirstIfd || pTIFF->GetError() )
- bStatus = FALSE;
-
- if ( bStatus )
- {
- sal_uInt32 nOffset = nFirstIfd;
-
- // calculate length of TIFF file
- do
- {
- pTIFF->Seek( nOrigPos + nOffset );
-
- if( pTIFF->GetError() )
- {
- pTIFF->ResetError();
- break;
- };
- nMaxPos = Max( pTIFF->Tell(), nMaxPos );
-
- *pTIFF >> nNumTags;
-
- // Schleife ueber Tags:
- for( i = 0; i < nNumTags; i++ )
- {
- *pTIFF >> nTagType >> nDataType >> nDataLen >> nOffset;
-
- if( DataTypeSize() * nDataLen > 4 )
- nMaxPos = Max( nOrigPos + nOffset + DataTypeSize() * nDataLen, nMaxPos );
- }
- *pTIFF >> nOffset;
- if ( pTIFF->IsEof() )
- nOffset = 0;
-
- nMaxPos = Max( pTIFF->Tell(), nMaxPos );
- if ( !nOffset )
- nMaxPos = Max( pTIFF->Tell(), nMaxPos );
- }
- while( nOffset );
-
- for ( UINT32 nNextIfd = nFirstIfd; nNextIfd && bStatus; )
- {
- pTIFF->Seek( nOrigPos + nNextIfd );
- {
- bByteSwap = FALSE;
-
- nNewSubFile = 0;
- nSubFile = 0;
- nImageWidth = 0;
- nImageLength = 0;
- nBitsPerSample = 1; // Defaultwert laut Doku
- nCompression = 1;
- nPhotometricInterpretation = 0;
- nThresholding = 1; // Defaultwert laut Doku
- nCellWidth = 1;
- nCellLength = 1;
- nFillOrder = 1; // Defaultwert laut Doku
- nNumStripOffsets = 0;
- nOrientation = 1;
- nSamplesPerPixel = 1; // Defaultwert laut Doku
- nRowsPerStrip = 0xffffffff; // Defaultwert laut Doku
- nNumStripByteCounts = 0;
- nMinSampleValue = 0; // Defaultwert laut Doku
- nMaxSampleValue = 0;
- fXResolution = 0.0;
- fYResolution = 0.0;
- nPlanarConfiguration = 1;
- nGroup3Options = 0; // Defaultwert laut Doku
- nGroup4Options = 0; // Defaultwert laut Doku
- nResolutionUnit = 2; // Defaultwert laut Doku
- nPredictor = 1;
- nNumColors = 0;
-
- pAcc = NULL;
- pColorMap = NULL;
- pStripOffsets = NULL;
- pStripByteCounts = NULL;
- pMap[ 0 ] = pMap[ 1 ] = pMap[ 2 ] = pMap[ 3 ] = NULL;
-
- *pTIFF >> nNumTags;
- nPos = pTIFF->Tell();
-
- // Schleife ueber Tags:
- for( i = 0; i < nNumTags; i++ )
- {
- *pTIFF >> nTagType >> nDataType >> nDataLen;
-
- if( DataTypeSize() * nDataLen > 4 )
- {
- *pTIFF >> nOffset;
- pTIFF->Seek( nOrigPos + nOffset );
- }
- ReadTagData( nTagType, nDataLen );
- nPos += 12; pTIFF->Seek( nPos );
-
- if ( pTIFF->GetError() )
- bStatus = FALSE;
-
- if ( bStatus == FALSE )
- break;
- }
- *pTIFF >> nNextIfd;
- if ( pTIFF->IsEof() )
- nNextIfd = 0;
- }
- if ( bStatus )
- {
- if ( nMaxSampleValue == 0 )
- nMaxSampleValue = ( 1 << nBitsPerSample ) - 1;
-
- if ( nPhotometricInterpretation == 2 || nPhotometricInterpretation == 5 || nPhotometricInterpretation == 6 )
- nDstBitsPerPixel = 24;
- else if ( nBitsPerSample*nSamplesPerPixel <= 1 )
- nDstBitsPerPixel = 1;
- else if ( nBitsPerSample*nSamplesPerPixel <= 4 )
- nDstBitsPerPixel = 4;
- else
- nDstBitsPerPixel = 8;
-
- aBitmap = Bitmap( Size( nImageWidth, nImageLength ), nDstBitsPerPixel );
- pAcc = aBitmap.AcquireWriteAccess();
- if ( pAcc )
- {
- if ( nPlanarConfiguration == 1 )
- nPlanes = 1;
- else
- nPlanes = nSamplesPerPixel;
-
- if ( ( nFillOrder == 2 ) && ( nCompression != 5 ) ) // im LZW Mode werden die bits schon invertiert
- bByteSwap = TRUE;
-
- nStripsPerPlane = ( nImageLength - 1 ) / nRowsPerStrip + 1;
- nBytesPerRow = ( nImageWidth * nSamplesPerPixel / nPlanes * nBitsPerSample + 7 ) >> 3;
-
- for ( ULONG j = 0; j < 4; j++ )
- {
- try
- {
- pMap[ j ] = new BYTE[ nBytesPerRow ];
- }
- catch (std::bad_alloc)
- {
- pMap[ j ] = NULL;
- bStatus = FALSE;
- break;
- }
- }
-
- if ( bStatus && ReadMap( 10, 60 ) )
- {
- nMaxPos = Max( pTIFF->Tell(), nMaxPos );
- MakePalCol();
- nMaxPos = Max( pTIFF->Tell(), nMaxPos );
- }
- else
- bStatus = FALSE;
-
- if( pAcc )
- {
- aBitmap.ReleaseAccess( pAcc );
- if ( bStatus )
- {
- AnimationBitmap aAnimationBitmap( aBitmap, Point( 0, 0 ), aBitmap.GetSizePixel(),
- ANIMATION_TIMEOUT_ON_CLICK, DISPOSE_BACK );
-
- aAnimation.Insert( aAnimationBitmap );
- }
- }
- // Aufraeumen:
- for ( i = 0; i < 4; i++ )
- delete[] pMap[ i ];
-
- delete[] pColorMap;
- delete[] pStripOffsets;
- delete[] pStripByteCounts;
- }
- }
- }
- }
-
- // seek to end of TIFF if succeeded
- pTIFF->SetNumberFormatInt( nOrigNumberFormat );
- pTIFF->Seek( bStatus ? nMaxPos : nOrigPos );
-
- if ( aAnimation.Count() )
- {
- if ( aAnimation.Count() == 1 )
- rGraphic = aAnimation.GetBitmapEx();
- else
- rGraphic = aAnimation; //aBitmap;
-
- return TRUE;
- }
- else
- return FALSE;
-}
-
-
-//================== GraphicImport - die exportierte Funktion ================
-
-extern "C" BOOL __LOADONCALLAPI GraphicImport(SvStream & rStream, Graphic & rGraphic, FilterConfigItem*, BOOL )
-{
- TIFFReader aTIFFReader;
-
- if ( aTIFFReader.ReadTIFF( rStream, rGraphic ) == FALSE )
- return FALSE;
-
- return TRUE;
-}
-
-//============================= fuer Windows ==================================
-#ifndef GCC
-#endif
-
-#ifdef WIN
-
-static HINSTANCE hDLLInst = 0; // HANDLE der DLL
-
-extern "C" int CALLBACK LibMain( HINSTANCE hDLL, WORD, WORD nHeap, LPSTR )
-{
-#ifndef WNT
- if ( nHeap )
- UnlockData( 0 );
-#endif
-
- hDLLInst = hDLL;
-
- return TRUE;
-}
-
-extern "C" int CALLBACK WEP( int )
-{
- return 1;
-}
-
-#endif
-
-
diff --git a/goodies/source/filter.vcl/itiff/lzwdecom.cxx b/goodies/source/filter.vcl/itiff/lzwdecom.cxx
deleted file mode 100644
index 673b634ae4e7..000000000000
--- a/goodies/source/filter.vcl/itiff/lzwdecom.cxx
+++ /dev/null
@@ -1,195 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: lzwdecom.cxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_goodies.hxx"
-
-#include "lzwdecom.hxx"
-
-LZWDecompressor::LZWDecompressor()
-{
- USHORT i;
-
- pTable=new LZWTableEntry[4096];
- pOutBuf=new BYTE[4096];
- for (i=0; i<4096; i++)
- {
- pTable[i].nPrevCode=0;
- pTable[i].nDataCount=1;
- pTable[i].nData=(BYTE)i;
- }
- pIStream=NULL;
- bFirst = TRUE;
- nOldCode = 0;
-}
-
-
-LZWDecompressor::~LZWDecompressor()
-{
- delete[] pOutBuf;
- delete[] pTable;
-}
-
-
-void LZWDecompressor::StartDecompression(SvStream & rIStream)
-{
- pIStream=&rIStream;
-
- nTableSize=258;
-
- bEOIFound=FALSE;
-
- nOutBufDataLen=0;
-
- *pIStream >> nInputBitsBuf;
-
- nInputBitsBufSize=8;
-
- if ( bFirst )
- {
- bInvert = nInputBitsBuf == 1;
- bFirst = FALSE;
- }
-
- if ( bInvert )
- nInputBitsBuf = ( ( nInputBitsBuf & 1 ) << 7 ) | ( ( nInputBitsBuf & 2 ) << 5 ) | ( ( nInputBitsBuf & 4 ) << 3 ) | ( ( nInputBitsBuf & 8 ) << 1 ) | ( ( nInputBitsBuf & 16 ) >> 1 ) | ( ( nInputBitsBuf & 32 ) >> 3 ) | ( ( nInputBitsBuf & 64 ) >> 5 ) | ( (nInputBitsBuf & 128 ) >> 7 );
-}
-
-
-ULONG LZWDecompressor::Decompress(BYTE * pTarget, ULONG nMaxCount)
-{
- ULONG nCount;
-
- if (pIStream==NULL) return 0;
-
- nCount=0;
- for (;;) {
-
- if (pIStream->GetError()) break;
-
- if (((ULONG)nOutBufDataLen)>=nMaxCount) {
- nOutBufDataLen = nOutBufDataLen - (USHORT)nMaxCount;
- nCount+=nMaxCount;
- while (nMaxCount>0) {
- *(pTarget++)=*(pOutBufData++);
- nMaxCount--;
- }
- break;
- }
-
- nMaxCount-=(ULONG)nOutBufDataLen;
- nCount+=nOutBufDataLen;
- while (nOutBufDataLen>0) {
- *(pTarget++)=*(pOutBufData++);
- nOutBufDataLen--;
- }
-
- if (bEOIFound==TRUE) break;
-
- DecompressSome();
-
- }
-
- return nCount;
-}
-
-
-USHORT LZWDecompressor::GetNextCode()
-{
- USHORT nBits,nCode;
-
- if (nTableSize<511) nBits=9;
- else if (nTableSize<1023) nBits=10;
- else if (nTableSize<2047) nBits=11;
- else nBits=12;
-
- nCode=0;
- do {
- if (nInputBitsBufSize<=nBits)
- {
- nCode=(nCode<<nInputBitsBufSize) | nInputBitsBuf;
- nBits = nBits - nInputBitsBufSize;
- *pIStream >> nInputBitsBuf;
- if ( bInvert )
- nInputBitsBuf = ( ( nInputBitsBuf & 1 ) << 7 ) | ( ( nInputBitsBuf & 2 ) << 5 ) | ( ( nInputBitsBuf & 4 ) << 3 ) | ( ( nInputBitsBuf & 8 ) << 1 ) | ( ( nInputBitsBuf & 16 ) >> 1 ) | ( ( nInputBitsBuf & 32 ) >> 3 ) | ( ( nInputBitsBuf & 64 ) >> 5 ) | ( (nInputBitsBuf & 128 ) >> 7 );
- nInputBitsBufSize=8;
- }
- else
- {
- nCode=(nCode<<nBits) | (nInputBitsBuf>>(nInputBitsBufSize-nBits));
- nInputBitsBufSize = nInputBitsBufSize - nBits;
- nInputBitsBuf&=0x00ff>>(8-nInputBitsBufSize);
- nBits=0;
- }
- } while (nBits>0);
-
- return nCode;
-}
-
-
-void LZWDecompressor::AddToTable(USHORT nPrevCode, USHORT nCodeFirstData)
-{
- while (pTable[nCodeFirstData].nDataCount>1)
- nCodeFirstData=pTable[nCodeFirstData].nPrevCode;
-
- pTable[nTableSize].nPrevCode=nPrevCode;
- pTable[nTableSize].nDataCount=pTable[nPrevCode].nDataCount+1;
- pTable[nTableSize].nData=pTable[nCodeFirstData].nData;
-
- nTableSize++;
-}
-
-
-void LZWDecompressor::DecompressSome()
-{
- USHORT i,nCode;
-
- nCode=GetNextCode();
- if (nCode==256) {
- nTableSize=258;
- nCode=GetNextCode();
- if (nCode==257) { bEOIFound=TRUE; return; }
- }
- else if (nCode<nTableSize) AddToTable(nOldCode,nCode);
- else if (nCode==nTableSize) AddToTable(nOldCode,nOldCode);
- else { bEOIFound=TRUE; return; }
-
- nOldCode=nCode;
-
- nOutBufDataLen=pTable[nCode].nDataCount;
- pOutBufData=pOutBuf+nOutBufDataLen;
- for (i=0; i<nOutBufDataLen; i++) {
- *(--pOutBufData)=pTable[nCode].nData;
- nCode=pTable[nCode].nPrevCode;
- }
-}
-
-
-
diff --git a/goodies/source/filter.vcl/itiff/lzwdecom.hxx b/goodies/source/filter.vcl/itiff/lzwdecom.hxx
deleted file mode 100644
index 0c5c6e6e7d63..000000000000
--- a/goodies/source/filter.vcl/itiff/lzwdecom.hxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: lzwdecom.hxx,v $
- * $Revision: 1.3 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef _LZWDECOM_HXX
-#define _LZWDECOM_HXX
-
-#include <tools/stream.hxx>
-
-struct LZWTableEntry {
- USHORT nPrevCode;
- USHORT nDataCount;
- BYTE nData;
-};
-
-class LZWDecompressor {
-
-public:
-
- LZWDecompressor();
- ~LZWDecompressor();
-
- void StartDecompression(SvStream & rIStream);
-
- ULONG Decompress(BYTE * pTarget, ULONG nMaxCount);
- // Liefert die Anzahl der geschriebenen Bytes, wenn < nMaxCount,
- // sind keine weiteren Daten zu entpacken, oder es ist ein
- // Fehler aufgetreten.
-
-private:
-
- USHORT GetNextCode();
- void AddToTable(USHORT nPrevCode, USHORT nCodeFirstData);
- void DecompressSome();
-
- SvStream * pIStream;
-
- LZWTableEntry * pTable;
- USHORT nTableSize;
-
- BOOL bEOIFound, bInvert, bFirst;
-
- USHORT nOldCode;
-
- BYTE * pOutBuf;
- BYTE * pOutBufData;
- USHORT nOutBufDataLen;
-
- BYTE nInputBitsBuf;
- USHORT nInputBitsBufSize;
-};
-
-
-#endif
-
-
diff --git a/goodies/source/filter.vcl/itiff/makefile.mk b/goodies/source/filter.vcl/itiff/makefile.mk
deleted file mode 100644
index 78405a563659..000000000000
--- a/goodies/source/filter.vcl/itiff/makefile.mk
+++ /dev/null
@@ -1,75 +0,0 @@
-#*************************************************************************
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# Copyright 2008 by Sun Microsystems, Inc.
-#
-# OpenOffice.org - a multi-platform office productivity suite
-#
-# $RCSfile: makefile.mk,v $
-#
-# $Revision: 1.13 $
-#
-# This file is part of OpenOffice.org.
-#
-# OpenOffice.org is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License version 3
-# only, as published by the Free Software Foundation.
-#
-# OpenOffice.org is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License version 3 for more details
-# (a copy is included in the LICENSE file that accompanied this code).
-#
-# You should have received a copy of the GNU Lesser General Public License
-# version 3 along with OpenOffice.org. If not, see
-# <http://www.openoffice.org/license.html>
-# for a copy of the LGPLv3 License.
-#
-#*************************************************************************
-
-PRJ=..$/..$/..
-
-PRJNAME=goodies
-TARGET=itiff
-DEPTARGET=vitiff
-
-# --- Settings -----------------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# --- Allgemein ----------------------------------------------------------
-
-.IF "$(editdebug)"!="" || "$(EDITDEBUG)"!=""
-CDEFS+= -DEDITDEBUG
-.ENDIF
-.IF "$(L10N_framework)"==""
-SLOFILES = $(SLO)$/itiff.obj \
- $(SLO)$/lzwdecom.obj \
- $(SLO)$/ccidecom.obj
-
-EXCEPTIONSNOOPTFILES= $(SLO)$/itiff.obj
-
-# ==========================================================================
-
-SHL1TARGET= iti$(DLLPOSTFIX)
-SHL1IMPLIB= itiff
-SHL1STDLIBS= $(VCLLIB) $(TOOLSLIB) $(SALLIB)
-SHL1LIBS= $(SLB)$/itiff.lib # $(LB)$/rtftoken.lib
-
-.IF "$(GUI)" != "UNX"
-.IF "$(COM)" != "GCC"
-SHL1OBJS= $(SLO)$/itiff.obj
-.ENDIF
-.ENDIF
-
-SHL1VERSIONMAP=exports.map
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-
-DEF1NAME=$(SHL1TARGET)
-.ENDIF
-
-# ==========================================================================
-
-.INCLUDE : target.mk