LibreOffice Module vcl (master)  1
floyd.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #pragma once
21 
22 #define CALC_ERRORS \
23  nTemp = p1T[nX++] >> 12; \
24  nBErr = MinMax( nTemp, 0, 255 ); \
25  nBErr = nBErr - FloydIndexMap[ nBC = FloydMap[nBErr] ]; \
26  nTemp = p1T[nX++] >> 12; \
27  nGErr = MinMax( nTemp, 0, 255 ); \
28  nGErr = nGErr - FloydIndexMap[ nGC = FloydMap[nGErr] ]; \
29  nTemp = p1T[nX] >> 12; \
30  nRErr = MinMax( nTemp, 0, 255 ); \
31  nRErr = nRErr - FloydIndexMap[ nRC = FloydMap[nRErr] ];
32 
33 #define CALC_TABLES3 \
34  p2T[nX++] += FloydError3[nBErr]; \
35  p2T[nX++] += FloydError3[nGErr]; \
36  p2T[nX++] += FloydError3[nRErr];
37 
38 #define CALC_TABLES5 \
39  p2T[nX++] += FloydError5[nBErr]; \
40  p2T[nX++] += FloydError5[nGErr]; \
41  p2T[nX++] += FloydError5[nRErr];
42 
43 #define CALC_TABLES7 \
44  p1T[++nX] += FloydError7[nBErr]; \
45  p2T[nX++] += FloydError1[nBErr]; \
46  p1T[nX] += FloydError7[nGErr]; \
47  p2T[nX++] += FloydError1[nGErr]; \
48  p1T[nX] += FloydError7[nRErr]; \
49  p2T[nX] += FloydError1[nRErr];
50 
51 const extern sal_uLong nVCLRLut[ 6 ] = { 16, 17, 18, 19, 20, 21 };
52 const extern sal_uLong nVCLGLut[ 6 ] = { 0, 6, 12, 18, 24, 30 };
53 const extern sal_uLong nVCLBLut[ 6 ] = { 0, 36, 72, 108, 144, 180 };
54 
55 const extern sal_uLong nVCLDitherLut[ 256 ] =
56 {
57  0, 49152, 12288, 61440, 3072, 52224, 15360, 64512, 768, 49920, 13056,
58  62208, 3840, 52992, 16128, 65280, 32768, 16384, 45056, 28672, 35840, 19456,
59  48128, 31744, 33536, 17152, 45824, 29440, 36608, 20224, 48896, 32512, 8192,
60  57344, 4096, 53248, 11264, 60416, 7168, 56320, 8960, 58112, 4864, 54016,
61  12032, 61184, 7936, 57088, 40960, 24576, 36864, 20480, 44032, 27648, 39936,
62  23552, 41728, 25344, 37632, 21248, 44800, 28416, 40704, 24320, 2048, 51200,
63  14336, 63488, 1024, 50176, 13312, 62464, 2816, 51968, 15104, 64256, 1792,
64  50944, 14080, 63232, 34816, 18432, 47104, 30720, 33792, 17408, 46080, 29696,
65  35584, 19200, 47872, 31488, 34560, 18176, 46848, 30464, 10240, 59392, 6144,
66  55296, 9216, 58368, 5120, 54272, 11008, 60160, 6912, 56064, 9984, 59136,
67  5888, 55040, 43008, 26624, 38912, 22528, 41984, 25600, 37888, 21504, 43776,
68  27392, 39680, 23296, 42752, 26368, 38656, 22272, 512, 49664, 12800, 61952,
69  3584, 52736, 15872, 65024, 256, 49408, 12544, 61696, 3328, 52480, 15616,
70  64768, 33280, 16896, 45568, 29184, 36352, 19968, 48640, 32256, 33024, 16640,
71  45312, 28928, 36096, 19712, 48384, 32000, 8704, 57856, 4608, 53760, 11776,
72  60928, 7680, 56832, 8448, 57600, 4352, 53504, 11520, 60672, 7424, 56576,
73  41472, 25088, 37376, 20992, 44544, 28160, 40448, 24064, 41216, 24832, 37120,
74  20736, 44288, 27904, 40192, 23808, 2560, 51712, 14848, 64000, 1536, 50688,
75  13824, 62976, 2304, 51456, 14592, 63744, 1280, 50432, 13568, 62720, 35328,
76  18944, 47616, 31232, 34304, 17920, 46592, 30208, 35072, 18688, 47360, 30976,
77  34048, 17664, 46336, 29952, 10752, 59904, 6656, 55808, 9728, 58880, 5632,
78  54784, 10496, 59648, 6400, 55552, 9472, 58624, 5376, 54528, 43520, 27136,
79  39424, 23040, 42496, 26112, 38400, 22016, 43264, 26880, 39168, 22784, 42240,
80  25856, 38144, 21760
81 };
82 
83 const extern sal_uLong nVCLLut[ 256 ] =
84 {
85  0, 1286, 2572, 3858, 5144, 6430, 7716, 9002,
86  10288, 11574, 12860, 14146, 15432, 16718, 18004, 19290,
87  20576, 21862, 23148, 24434, 25720, 27006, 28292, 29578,
88  30864, 32150, 33436, 34722, 36008, 37294, 38580, 39866,
89  41152, 42438, 43724, 45010, 46296, 47582, 48868, 50154,
90  51440, 52726, 54012, 55298, 56584, 57870, 59156, 60442,
91  61728, 63014, 64300, 65586, 66872, 68158, 69444, 70730,
92  72016, 73302, 74588, 75874, 77160, 78446, 79732, 81018,
93  82304, 83590, 84876, 86162, 87448, 88734, 90020, 91306,
94  92592, 93878, 95164, 96450, 97736, 99022,100308,101594,
95  102880,104166,105452,106738,108024,109310,110596,111882,
96  113168,114454,115740,117026,118312,119598,120884,122170,
97  123456,124742,126028,127314,128600,129886,131172,132458,
98  133744,135030,136316,137602,138888,140174,141460,142746,
99  144032,145318,146604,147890,149176,150462,151748,153034,
100  154320,155606,156892,158178,159464,160750,162036,163322,
101  164608,165894,167180,168466,169752,171038,172324,173610,
102  174896,176182,177468,178754,180040,181326,182612,183898,
103  185184,186470,187756,189042,190328,191614,192900,194186,
104  195472,196758,198044,199330,200616,201902,203188,204474,
105  205760,207046,208332,209618,210904,212190,213476,214762,
106  216048,217334,218620,219906,221192,222478,223764,225050,
107  226336,227622,228908,230194,231480,232766,234052,235338,
108  236624,237910,239196,240482,241768,243054,244340,245626,
109  246912,248198,249484,250770,252056,253342,254628,255914,
110  257200,258486,259772,261058,262344,263630,264916,266202,
111  267488,268774,270060,271346,272632,273918,275204,276490,
112  277776,279062,280348,281634,282920,284206,285492,286778,
113  288064,289350,290636,291922,293208,294494,295780,297066,
114  298352,299638,300924,302210,303496,304782,306068,307354,
115  308640,309926,311212,312498,313784,315070,316356,317642,
116  318928,320214,321500,322786,324072,325358,326644,327930
117 };
118 
119 const tools::Long FloydMap[256] =
120 {
121  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
122  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
123  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
124  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
125  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2,
126  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
127  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
128  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
129  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
130  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
131  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
132  3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
133  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
134  4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
135  4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
136  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
137 };
138 
140 {
141  -7680, -7424, -7168, -6912, -6656, -6400, -6144,
142  -5888, -5632, -5376, -5120, -4864, -4608, -4352,
143  -4096, -3840, -3584, -3328, -3072, -2816, -2560,
144  -2304, -2048, -1792, -1536, -1280, -1024, -768,
145  -512, -256, 0, 256, 512, 768, 1024, 1280, 1536,
146  1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584,
147  3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632,
148  5888, 6144, 6400, 6656, 6912, 7168, 7424, 7680
149 };
150 
152 {
153  -23040, -22272, -21504, -20736, -19968, -19200,
154  -18432, -17664, -16896, -16128, -15360, -14592,
155  -13824, -13056, -12288, -11520, -10752, -9984,
156  -9216, -8448, -7680, -6912, -6144, -5376, -4608,
157  -3840, -3072, -2304, -1536, -768, 0, 768, 1536,
158  2304, 3072, 3840, 4608, 5376, 6144, 6912, 7680,
159  8448, 9216, 9984, 10752, 11520, 12288, 13056,
160  13824, 14592, 15360, 16128, 16896, 17664, 18432,
161  19200, 19968, 20736, 21504, 22272, 23040
162 };
163 
165 {
166  -38400, -37120, -35840, -34560, -33280, -32000,
167  -30720, -29440, -28160, -26880, -25600, -24320,
168  -23040, -21760, -20480, -19200, -17920, -16640,
169  -15360, -14080, -12800, -11520, -10240, -8960,
170  -7680, -6400, -5120, -3840, -2560, -1280, 0,
171  1280, 2560, 3840, 5120, 6400, 7680, 8960, 10240,
172  11520, 12800, 14080, 15360, 16640, 17920, 19200,
173  20480, 21760, 23040, 24320, 25600, 26880, 28160,
174  29440, 30720, 32000, 33280, 34560, 35840, 37120,
175  38400
176 };
177 
179 {
180  -53760, -51968, -50176, -48384, -46592, -44800,
181  -43008, -41216, -39424, -37632, -35840, -34048,
182  -32256, -30464, -28672, -26880, -25088, -23296,
183  -21504, -19712, -17920, -16128, -14336, -12544,
184  -10752, -8960, -7168, -5376, -3584, -1792, 0,
185  1792, 3584, 5376, 7168, 8960, 10752, 12544, 14336,
186  16128, 17920, 19712, 21504, 23296, 25088, 26880,
187  28672, 30464, 32256, 34048, 35840, 37632, 39424,
188  41216, 43008, 44800, 46592, 48384, 50176, 51968,
189  53760
190 };
191 
193 {
194  -30, 21, 72, 123, 174, 225
195 };
196 
197 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
sal_uIntPtr sal_uLong
long Long
const tools::Long FloydError5[61]
Definition: floyd.hxx:164
const tools::Long FloydError7[61]
Definition: floyd.hxx:178
const sal_uLong nVCLLut[256]
const tools::Long FloydError3[61]
Definition: floyd.hxx:151
const sal_uLong nVCLBLut[6]
const tools::Long FloydIndexMap[6]
Definition: floyd.hxx:192
const tools::Long FloydMap[256]
Definition: floyd.hxx:119
const sal_uLong nVCLGLut[6]
const sal_uLong nVCLRLut[6]
const sal_uLong nVCLDitherLut[256]
const tools::Long FloydError1[61]
Definition: floyd.hxx:139