367 |
|
} |
368 |
|
|
369 |
|
|
370 |
< |
int |
371 |
< |
colr_norm(clr, nclr) /* normalize a short color, return shift */ |
372 |
< |
COLR clr, nclr; |
370 |
> |
normcolrs(scan, len) /* normalize a scanline of colrs */ |
371 |
> |
register COLR *scan; |
372 |
> |
int len; |
373 |
|
{ |
374 |
|
register int c; |
375 |
< |
register int shift = clr[EXP]-COLXS; |
375 |
> |
register int shift; |
376 |
|
|
377 |
< |
if (shift > 0) { |
378 |
< |
if (shift >= 8) { |
379 |
< |
nclr[RED] = nclr[GRN] = nclr[BLU] = 255; |
380 |
< |
} else { |
381 |
< |
c = clr[RED] << shift; |
382 |
< |
nclr[RED] = c > 255 ? 255 : c; |
383 |
< |
c = clr[GRN] << shift; |
384 |
< |
nclr[GRN] = c > 255 ? 255 : c; |
385 |
< |
c = clr[BLU] << shift; |
386 |
< |
nclr[BLU] = c > 255 ? 255 : c; |
377 |
> |
while (len-- > 0) { |
378 |
> |
shift = scan[0][EXP] - COLXS; |
379 |
> |
if (shift > 0) { |
380 |
> |
if (shift >= 8) { |
381 |
> |
scan[0][RED] = |
382 |
> |
scan[0][GRN] = |
383 |
> |
scan[0][BLU] = 255; |
384 |
> |
} else { |
385 |
> |
c = scan[0][RED] << shift; |
386 |
> |
scan[0][RED] = c > 255 ? 255 : c; |
387 |
> |
c = scan[0][GRN] << shift; |
388 |
> |
scan[0][GRN] = c > 255 ? 255 : c; |
389 |
> |
c = scan[0][BLU] << shift; |
390 |
> |
scan[0][BLU] = c > 255 ? 255 : c; |
391 |
> |
} |
392 |
> |
} else if (shift < 0) { |
393 |
> |
if (shift <= -8) { |
394 |
> |
scan[0][RED] = |
395 |
> |
scan[0][GRN] = |
396 |
> |
scan[0][BLU] = 0; |
397 |
> |
} else { |
398 |
> |
scan[0][RED] = scan[0][RED] >> -shift; |
399 |
> |
scan[0][GRN] = scan[0][GRN] >> -shift; |
400 |
> |
scan[0][BLU] = scan[0][BLU] >> -shift; |
401 |
> |
} |
402 |
|
} |
403 |
< |
} else if (shift < 0) { |
404 |
< |
if (shift <= -8) { |
390 |
< |
nclr[RED] = nclr[GRN] = nclr[BLU] = 0; |
391 |
< |
} else { |
392 |
< |
nclr[RED] = clr[RED] >> -shift; |
393 |
< |
nclr[GRN] = clr[GRN] >> -shift; |
394 |
< |
nclr[BLU] = clr[BLU] >> -shift; |
395 |
< |
} |
396 |
< |
} else { |
397 |
< |
nclr[RED] = clr[RED]; |
398 |
< |
nclr[GRN] = clr[GRN]; |
399 |
< |
nclr[BLU] = clr[BLU]; |
403 |
> |
scan[0][EXP] = COLXS; |
404 |
> |
scan++; |
405 |
|
} |
401 |
– |
nclr[EXP] = COLXS; |
402 |
– |
return(shift); |
406 |
|
} |
407 |
|
|
408 |
|
|