Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/source/fitz/bitmap.c @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 // Copyright (C) 2004-2023 Artifex Software, Inc. | |
| 2 // | |
| 3 // This file is part of MuPDF. | |
| 4 // | |
| 5 // MuPDF is free software: you can redistribute it and/or modify it under the | |
| 6 // terms of the GNU Affero General Public License as published by the Free | |
| 7 // Software Foundation, either version 3 of the License, or (at your option) | |
| 8 // any later version. | |
| 9 // | |
| 10 // MuPDF is distributed in the hope that it will be useful, but WITHOUT ANY | |
| 11 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
| 12 // FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more | |
| 13 // details. | |
| 14 // | |
| 15 // You should have received a copy of the GNU Affero General Public License | |
| 16 // along with MuPDF. If not, see <https://www.gnu.org/licenses/agpl-3.0.en.html> | |
| 17 // | |
| 18 // Alternative licensing terms are available from the licensor. | |
| 19 // For commercial licensing, see <https://www.artifex.com/> or contact | |
| 20 // Artifex Software, Inc., 39 Mesa Street, Suite 108A, San Francisco, | |
| 21 // CA 94129, USA, for further information. | |
| 22 | |
| 23 #include "mupdf/fitz.h" | |
| 24 | |
| 25 #include <string.h> | |
| 26 | |
| 27 static const unsigned char pkm[256*8] = | |
| 28 { | |
| 29 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 31 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 32 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 33 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 34 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 35 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 36 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 37 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 38 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 39 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 40 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 41 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 42 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 43 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 44 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 45 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 46 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 47 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 48 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 49 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 50 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 51 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 52 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 53 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 54 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 55 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 56 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 57 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 58 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 59 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 60 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 61 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 62 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 63 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 64 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 65 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 66 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 67 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 68 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 69 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 70 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 71 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 72 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 73 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 74 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 75 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 76 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 77 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 78 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 79 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 80 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 81 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 82 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 83 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 84 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 85 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 86 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 87 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 88 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 89 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 90 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 91 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 92 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 93 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 94 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 95 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 96 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 97 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 98 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 99 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 100 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 101 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 102 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 103 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 104 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 105 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 106 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 107 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 108 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 109 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 110 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 111 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 112 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 113 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 114 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 115 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 116 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 117 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 118 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 119 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 120 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 121 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 122 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 123 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 124 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 125 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 126 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 127 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 128 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 129 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 130 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 131 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 132 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 133 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 134 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 135 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 136 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 137 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 138 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 139 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 140 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 141 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 142 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 143 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 144 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 145 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 146 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 147 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 148 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 149 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 150 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 151 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 152 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 153 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 154 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 155 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 156 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 157 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 158 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 159 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 160 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 161 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 162 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 163 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 164 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 165 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 166 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 167 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 168 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 169 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 170 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 171 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 172 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 173 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 174 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 175 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 176 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 177 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 178 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 179 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 180 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 181 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 182 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 183 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 184 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 185 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 186 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 187 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 188 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 189 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 190 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 191 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 192 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 193 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 194 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 195 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 196 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 197 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 198 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 199 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 200 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 201 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 202 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 203 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 204 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 205 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 206 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 207 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 208 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 209 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 210 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 211 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 212 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 213 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 214 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 215 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 216 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 217 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 218 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 219 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 220 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 221 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 222 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 223 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 224 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 225 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 226 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 227 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 228 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 229 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 230 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 231 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 232 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 233 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 234 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 235 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 236 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 237 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 238 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 239 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 240 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 241 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 242 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 243 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 244 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 245 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 246 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 247 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 248 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 249 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 250 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 251 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 252 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 253 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, | |
| 254 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, | |
| 255 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, | |
| 256 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, | |
| 257 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, | |
| 258 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0xFF, | |
| 259 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, | |
| 260 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF, | |
| 261 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, | |
| 262 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0xFF, | |
| 263 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, | |
| 264 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, | |
| 265 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, | |
| 266 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, | |
| 267 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, | |
| 268 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, | |
| 269 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, | |
| 270 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, | |
| 271 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00, | |
| 272 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, | |
| 273 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, | |
| 274 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, | |
| 275 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, | |
| 276 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, | |
| 277 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, | |
| 278 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, | |
| 279 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00, | |
| 280 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, | |
| 281 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, | |
| 282 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, | |
| 283 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, | |
| 284 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF | |
| 285 }; | |
| 286 | |
| 287 fz_bitmap * | |
| 288 fz_new_bitmap(fz_context *ctx, int w, int h, int n, int xres, int yres) | |
| 289 { | |
| 290 fz_bitmap *bit; | |
| 291 | |
| 292 /* Stride is 32 bit aligned. We may want to make this 64 bit if we use SSE2 etc. */ | |
| 293 int stride = ((n * w + 31) & ~31) >> 3; | |
| 294 if (h < 0 || ((size_t)h > (size_t)(SIZE_MAX / stride))) | |
| 295 fz_throw(ctx, FZ_ERROR_LIMIT, "bitmap too large"); | |
| 296 | |
| 297 bit = fz_malloc_struct(ctx, fz_bitmap); | |
| 298 fz_try(ctx) | |
| 299 { | |
| 300 bit->refs = 1; | |
| 301 bit->w = w; | |
| 302 bit->h = h; | |
| 303 bit->n = n; | |
| 304 bit->xres = xres; | |
| 305 bit->yres = yres; | |
| 306 bit->stride = stride; | |
| 307 bit->samples = Memento_label(fz_malloc(ctx, (size_t)h * bit->stride), "bitmap_samples"); | |
| 308 } | |
| 309 fz_catch(ctx) | |
| 310 { | |
| 311 fz_free(ctx, bit); | |
| 312 fz_rethrow(ctx); | |
| 313 } | |
| 314 | |
| 315 return bit; | |
| 316 } | |
| 317 | |
| 318 fz_bitmap * | |
| 319 fz_keep_bitmap(fz_context *ctx, fz_bitmap *bit) | |
| 320 { | |
| 321 return fz_keep_imp(ctx, bit, &bit->refs); | |
| 322 } | |
| 323 | |
| 324 void | |
| 325 fz_drop_bitmap(fz_context *ctx, fz_bitmap *bit) | |
| 326 { | |
| 327 if (fz_drop_imp(ctx, bit, &bit->refs)) | |
| 328 { | |
| 329 fz_free(ctx, bit->samples); | |
| 330 fz_free(ctx, bit); | |
| 331 } | |
| 332 } | |
| 333 | |
| 334 void | |
| 335 fz_clear_bitmap(fz_context *ctx, fz_bitmap *bit) | |
| 336 { | |
| 337 memset(bit->samples, 0, (size_t)bit->stride * bit->h); | |
| 338 } | |
| 339 | |
| 340 static void | |
| 341 pbm_write_header(fz_context *ctx, fz_band_writer *writer, fz_colorspace *cs) | |
| 342 { | |
| 343 fz_output *out = writer->out; | |
| 344 int w = writer->w; | |
| 345 int h = writer->h; | |
| 346 | |
| 347 if (writer->s != 0) | |
| 348 fz_throw(ctx, FZ_ERROR_ARGUMENT, "pbms cannot contain spot colors"); | |
| 349 if (writer->n != 1) | |
| 350 fz_throw(ctx, FZ_ERROR_ARGUMENT, "too many color components in bitmap"); | |
| 351 | |
| 352 fz_write_printf(ctx, out, "P4\n%d %d\n", w, h); | |
| 353 } | |
| 354 | |
| 355 static void | |
| 356 pkm_write_header(fz_context *ctx, fz_band_writer *writer, fz_colorspace *cs) | |
| 357 { | |
| 358 fz_output *out = writer->out; | |
| 359 int w = writer->w; | |
| 360 int h = writer->h; | |
| 361 | |
| 362 if (writer->s != 0) | |
| 363 fz_throw(ctx, FZ_ERROR_ARGUMENT, "pkms cannot contain spot colors"); | |
| 364 if (writer->n != 4) | |
| 365 fz_throw(ctx, FZ_ERROR_ARGUMENT, "wrong number of color components in bitmap"); | |
| 366 | |
| 367 fz_write_printf(ctx, out, "P7\nWIDTH %d\nHEIGHT %d\nDEPTH 4\nMAXVAL 255\nTUPLTYPE CMYK\nENDHDR\n", w, h); | |
| 368 } | |
| 369 | |
| 370 void | |
| 371 fz_write_bitmap_as_pbm(fz_context *ctx, fz_output *out, fz_bitmap *bitmap) | |
| 372 { | |
| 373 fz_band_writer *writer; | |
| 374 | |
| 375 if (bitmap->n != 1) | |
| 376 fz_throw(ctx, FZ_ERROR_ARGUMENT, "bitmap must be monochrome to save as PBM"); | |
| 377 | |
| 378 writer = fz_new_pbm_band_writer(ctx, out); | |
| 379 fz_try(ctx) | |
| 380 { | |
| 381 fz_write_header(ctx, writer, bitmap->w, bitmap->h, 1, 0, 0, 0, 0, NULL, NULL); | |
| 382 fz_write_band(ctx, writer, bitmap->stride, bitmap->h, bitmap->samples); | |
| 383 fz_close_band_writer(ctx, writer); | |
| 384 } | |
| 385 fz_always(ctx) | |
| 386 fz_drop_band_writer(ctx, writer); | |
| 387 fz_catch(ctx) | |
| 388 fz_rethrow(ctx); | |
| 389 } | |
| 390 | |
| 391 void | |
| 392 fz_write_bitmap_as_pkm(fz_context *ctx, fz_output *out, fz_bitmap *bitmap) | |
| 393 { | |
| 394 fz_band_writer *writer; | |
| 395 | |
| 396 if (bitmap->n != 4) | |
| 397 fz_throw(ctx, FZ_ERROR_ARGUMENT, "bitmap must be CMYK to save as PKM"); | |
| 398 | |
| 399 writer = fz_new_pkm_band_writer(ctx, out); | |
| 400 fz_try(ctx) | |
| 401 { | |
| 402 fz_write_header(ctx, writer, bitmap->w, bitmap->h, 4, 0, 0, 0, 0, NULL, NULL); | |
| 403 fz_write_band(ctx, writer, bitmap->stride, bitmap->h, bitmap->samples); | |
| 404 fz_close_band_writer(ctx, writer); | |
| 405 } | |
| 406 fz_always(ctx) | |
| 407 fz_drop_band_writer(ctx, writer); | |
| 408 fz_catch(ctx) | |
| 409 fz_rethrow(ctx); | |
| 410 } | |
| 411 | |
| 412 static void | |
| 413 pbm_write_band(fz_context *ctx, fz_band_writer *writer, int stride, int band_start, int band_height, const unsigned char *p) | |
| 414 { | |
| 415 fz_output *out = writer->out; | |
| 416 int w = writer->w; | |
| 417 int h = writer->h; | |
| 418 int bytestride; | |
| 419 int end = band_start + band_height; | |
| 420 | |
| 421 if (end > h) | |
| 422 end = h; | |
| 423 end -= band_start; | |
| 424 | |
| 425 bytestride = (w + 7) >> 3; | |
| 426 while (end--) | |
| 427 { | |
| 428 fz_write_data(ctx, out, p, bytestride); | |
| 429 p += stride; | |
| 430 } | |
| 431 } | |
| 432 | |
| 433 static void | |
| 434 pkm_write_band(fz_context *ctx, fz_band_writer *writer, int stride, int band_start, int band_height, const unsigned char *p) | |
| 435 { | |
| 436 fz_output *out = writer->out; | |
| 437 int w = writer->w; | |
| 438 int h = writer->h; | |
| 439 int bytestride; | |
| 440 int end = band_start + band_height; | |
| 441 | |
| 442 | |
| 443 if (end > h) | |
| 444 end = h; | |
| 445 end -= band_start; | |
| 446 | |
| 447 bytestride = stride - (w>>1); | |
| 448 while (end--) | |
| 449 { | |
| 450 int ww = w-1; | |
| 451 while (ww > 0) | |
| 452 { | |
| 453 fz_write_data(ctx, out, &pkm[8 * *p++], 8); | |
| 454 ww -= 2; | |
| 455 } | |
| 456 if (ww == 0) | |
| 457 fz_write_data(ctx, out, &pkm[8 * *p], 4); | |
| 458 p += bytestride; | |
| 459 } | |
| 460 } | |
| 461 | |
| 462 fz_band_writer *fz_new_pbm_band_writer(fz_context *ctx, fz_output *out) | |
| 463 { | |
| 464 fz_band_writer *writer = fz_new_band_writer(ctx, fz_band_writer, out); | |
| 465 | |
| 466 writer->header = pbm_write_header; | |
| 467 writer->band = pbm_write_band; | |
| 468 | |
| 469 return writer; | |
| 470 } | |
| 471 | |
| 472 fz_band_writer *fz_new_pkm_band_writer(fz_context *ctx, fz_output *out) | |
| 473 { | |
| 474 fz_band_writer *writer = fz_new_band_writer(ctx, fz_band_writer, out); | |
| 475 | |
| 476 writer->header = pkm_write_header; | |
| 477 writer->band = pkm_write_band; | |
| 478 | |
| 479 return writer; | |
| 480 } | |
| 481 | |
| 482 void | |
| 483 fz_save_bitmap_as_pbm(fz_context *ctx, fz_bitmap *bitmap, const char *filename) | |
| 484 { | |
| 485 fz_output *out = fz_new_output_with_path(ctx, filename, 0); | |
| 486 fz_try(ctx) | |
| 487 { | |
| 488 fz_write_bitmap_as_pbm(ctx, out, bitmap); | |
| 489 fz_close_output(ctx, out); | |
| 490 } | |
| 491 fz_always(ctx) | |
| 492 fz_drop_output(ctx, out); | |
| 493 fz_catch(ctx) | |
| 494 fz_rethrow(ctx); | |
| 495 } | |
| 496 | |
| 497 void | |
| 498 fz_save_bitmap_as_pkm(fz_context *ctx, fz_bitmap *bitmap, const char *filename) | |
| 499 { | |
| 500 fz_output *out = fz_new_output_with_path(ctx, filename, 0); | |
| 501 fz_try(ctx) | |
| 502 { | |
| 503 fz_write_bitmap_as_pkm(ctx, out, bitmap); | |
| 504 fz_close_output(ctx, out); | |
| 505 } | |
| 506 fz_always(ctx) | |
| 507 fz_drop_output(ctx, out); | |
| 508 fz_catch(ctx) | |
| 509 fz_rethrow(ctx); | |
| 510 } | |
| 511 | |
| 512 void | |
| 513 fz_save_pixmap_as_pbm(fz_context *ctx, fz_pixmap *pixmap, const char *filename) | |
| 514 { | |
| 515 fz_bitmap *bitmap = fz_new_bitmap_from_pixmap(ctx, pixmap, NULL); | |
| 516 fz_try(ctx) | |
| 517 fz_save_bitmap_as_pbm(ctx, bitmap, filename); | |
| 518 fz_always(ctx) | |
| 519 fz_drop_bitmap(ctx, bitmap); | |
| 520 fz_catch(ctx) | |
| 521 fz_rethrow(ctx); | |
| 522 } | |
| 523 | |
| 524 void | |
| 525 fz_save_pixmap_as_pkm(fz_context *ctx, fz_pixmap *pixmap, const char *filename) | |
| 526 { | |
| 527 fz_bitmap *bitmap = fz_new_bitmap_from_pixmap(ctx, pixmap, NULL); | |
| 528 fz_try(ctx) | |
| 529 fz_save_bitmap_as_pkm(ctx, bitmap, filename); | |
| 530 fz_always(ctx) | |
| 531 fz_drop_bitmap(ctx, bitmap); | |
| 532 fz_catch(ctx) | |
| 533 fz_rethrow(ctx); | |
| 534 } | |
| 535 | |
| 536 void fz_bitmap_details(fz_bitmap *bit, int *w, int *h, int *n, int *stride) | |
| 537 { | |
| 538 if (!bit) | |
| 539 { | |
| 540 if (w) | |
| 541 *w = 0; | |
| 542 if (h) | |
| 543 *h = 0; | |
| 544 if (n) | |
| 545 *n = 0; | |
| 546 if (stride) | |
| 547 *stride = 0; | |
| 548 return; | |
| 549 } | |
| 550 if (w) | |
| 551 *w = bit->w; | |
| 552 if (h) | |
| 553 *h = bit->h; | |
| 554 if (n) | |
| 555 *n = bit->n; | |
| 556 if (stride) | |
| 557 *stride = bit->stride; | |
| 558 } |
