MCPcopy Create free account
hub / github.com/creatale/node-dv / pixMaxDynamicRange

Function pixMaxDynamicRange

deps/leptonica/src/pixarith.c:1154–1322  ·  view source on GitHub ↗

-----------------------------------------------------------------------* * Scale for maximum dynamic range * *-----------------------------------------------------------------------*/ ! * \brief pixMaxDynamicRange() * * \param[in] pixs 4, 8, 16 or 32 bpp source * \param[in] type L_LINEAR_SCALE or L_LOG_SCALE * \return pixd 8 bpp, or NULL on e

Source from the content-addressed store, hash-verified

1152 * </pre>
1153 */
1154PIX *
1155pixMaxDynamicRange(PIX *pixs,
1156 l_int32 type)
1157{
1158l_uint8 dval;
1159l_int32 i, j, w, h, d, wpls, wpld, max;
1160l_uint32 *datas, *datad;
1161l_uint32 word, sval;
1162l_uint32 *lines, *lined;
1163l_float32 factor;
1164l_float32 *tab;
1165PIX *pixd;
1166
1167 PROCNAME("pixMaxDynamicRange");
1168
1169 if (!pixs)
1170 return (PIX *)ERROR_PTR("pixs not defined", procName, NULL);
1171 pixGetDimensions(pixs, &w, &h, &d);
1172 if (d != 4 && d != 8 && d != 16 && d != 32)
1173 return (PIX *)ERROR_PTR("pixs not in {4,8,16,32} bpp", procName, NULL);
1174 if (type != L_LINEAR_SCALE && type != L_LOG_SCALE)
1175 return (PIX *)ERROR_PTR("invalid type", procName, NULL);
1176
1177 if ((pixd = pixCreate(w, h, 8)) == NULL)
1178 return (PIX *)ERROR_PTR("pixd not made", procName, NULL);
1179 pixCopyResolution(pixd, pixs);
1180 datas = pixGetData(pixs);
1181 datad = pixGetData(pixd);
1182 wpls = pixGetWpl(pixs);
1183 wpld = pixGetWpl(pixd);
1184
1185 /* Get max */
1186 max = 0;
1187 for (i = 0; i < h; i++) {
1188 lines = datas + i * wpls;
1189 for (j = 0; j < wpls; j++) {
1190 word = *(lines + j);
1191 if (d == 4) {
1192 max = L_MAX(max, word >> 28);
1193 max = L_MAX(max, (word >> 24) & 0xf);
1194 max = L_MAX(max, (word >> 20) & 0xf);
1195 max = L_MAX(max, (word >> 16) & 0xf);
1196 max = L_MAX(max, (word >> 12) & 0xf);
1197 max = L_MAX(max, (word >> 8) & 0xf);
1198 max = L_MAX(max, (word >> 4) & 0xf);
1199 max = L_MAX(max, word & 0xf);
1200 } else if (d == 8) {
1201 max = L_MAX(max, word >> 24);
1202 max = L_MAX(max, (word >> 16) & 0xff);
1203 max = L_MAX(max, (word >> 8) & 0xff);
1204 max = L_MAX(max, word & 0xff);
1205 } else if (d == 16) {
1206 max = L_MAX(max, word >> 16);
1207 max = L_MAX(max, word & 0xffff);
1208 } else { /* d == 32 (rgb) */
1209 max = L_MAX(max, word);
1210 }
1211 }

Callers 3

NAN_METHODFunction · 0.85
pixDisplayWriteFunction · 0.85
pixFindHistoPeaksHSVFunction · 0.85

Calls 7

pixGetDimensionsFunction · 0.85
pixCreateFunction · 0.85
pixCopyResolutionFunction · 0.85
pixGetDataFunction · 0.85
pixGetWplFunction · 0.85
makeLogBase2TabFunction · 0.85
getLogBase2Function · 0.85

Tested by

no test coverage detected