45 #include <config_auto.h>
49 #include "allheaders.h"
52 static l_uint16 * makeExpandTab2x(
void);
53 static l_uint32 * makeExpandTab4x(
void);
54 static l_uint32 * makeExpandTab8x(
void);
55 static l_uint32 expandtab16[] = {
56 0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff};
74 l_int32 w, h, d, wd, hd, wpls, wpld, i, j, k, start;
75 l_uint32 *datas, *datad, *lines, *lined;
79 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
82 return (
PIX *)ERROR_PTR(
"pixs not binary", __func__, NULL);
83 if (xfact <= 0 || yfact <= 0)
84 return (
PIX *)ERROR_PTR(
"invalid scale factor: <= 0", __func__, NULL);
89 if (xfact == 2 || xfact == 4 || xfact == 8 || xfact == 16)
93 wpls = pixGetWpl(pixs);
97 if ((pixd =
pixCreate(wd, hd, 1)) == NULL)
98 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
99 pixCopyResolution(pixd, pixs);
100 pixScaleResolution(pixd, (l_float32)xfact, (l_float32)yfact);
101 wpld = pixGetWpl(pixd);
104 for (i = 0; i < h; i++) {
105 lines = datas + i * wpls;
106 lined = datad + yfact * i * wpld;
107 for (j = 0; j < w; j++) {
110 for (k = 0; k < xfact; k++)
114 for (k = 1; k < yfact; k++)
115 memcpy(lined + k * wpld, lined, 4 * wpld);
138 l_int32 i, j, k, w, h, d, wd, hd, wpls, wpld, sdibits, sqbits, sbytes;
139 l_uint32 *datas, *datad, *lines, *lined, *tab4, *tab8;
143 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
146 return (
PIX *)ERROR_PTR(
"pixs not binary", __func__, NULL);
149 if (factor != 2 && factor != 4 && factor != 8 && factor != 16)
150 return (
PIX *)ERROR_PTR(
"factor must be in {2,4,8,16}", __func__, NULL);
152 wpls = pixGetWpl(pixs);
156 if ((pixd =
pixCreate(wd, hd, 1)) == NULL)
157 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
158 pixCopyResolution(pixd, pixs);
159 pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor);
160 wpld = pixGetWpl(pixd);
163 tab2 = makeExpandTab2x();
164 sbytes = (w + 7) / 8;
165 for (i = 0; i < h; i++) {
166 lines = datas + i * wpls;
167 lined = datad + 2 * i * wpld;
168 for (j = 0; j < sbytes; j++) {
172 memcpy(lined + wpld, lined, 4 * wpld);
175 }
else if (factor == 4) {
176 tab4 = makeExpandTab4x();
177 sbytes = (w + 7) / 8;
178 for (i = 0; i < h; i++) {
179 lines = datas + i * wpls;
180 lined = datad + 4 * i * wpld;
181 for (j = 0; j < sbytes; j++) {
183 lined[j] = tab4[sval];
185 for (k = 1; k < 4; k++)
186 memcpy(lined + k * wpld, lined, 4 * wpld);
189 }
else if (factor == 8) {
190 tab8 = makeExpandTab8x();
191 sqbits = (w + 3) / 4;
192 for (i = 0; i < h; i++) {
193 lines = datas + i * wpls;
194 lined = datad + 8 * i * wpld;
195 for (j = 0; j < sqbits; j++) {
197 lined[j] = tab8[sval];
199 for (k = 1; k < 8; k++)
200 memcpy(lined + k * wpld, lined, 4 * wpld);
204 sdibits = (w + 1) / 2;
205 for (i = 0; i < h; i++) {
206 lines = datas + i * wpls;
207 lined = datad + 16 * i * wpld;
208 for (j = 0; j < sdibits; j++) {
210 lined[j] = expandtab16[sval];
212 for (k = 1; k < 16; k++)
213 memcpy(lined + k * wpld, lined, 4 * wpld);
225 makeExpandTab2x(
void)
230 tab = (l_uint16 *) LEPT_CALLOC(256,
sizeof(l_uint16));
231 for (i = 0; i < 256; i++) {
254 makeExpandTab4x(
void)
259 tab = (l_uint32 *) LEPT_CALLOC(256,
sizeof(l_uint32));
260 for (i = 0; i < 256; i++) {
276 tab[i] |= 0xf0000000;
283 makeExpandTab8x(
void)
288 tab = (l_uint32 *) LEPT_CALLOC(16,
sizeof(l_uint32));
289 for (i = 0; i < 16; i++) {
297 tab[i] |= 0xff000000;
#define GET_DATA_QBIT(pdata, n)
#define SET_DATA_BIT(pdata, n)
#define SET_DATA_TWO_BYTES(pdata, n, val)
#define GET_DATA_BYTE(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
#define GET_DATA_BIT(pdata, n)
PIX * pixExpandBinaryReplicate(PIX *pixs, l_int32 xfact, l_int32 yfact)
pixExpandBinaryReplicate()
PIX * pixExpandBinaryPower2(PIX *pixs, l_int32 factor)
pixExpandBinaryPower2()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()