Lines 32-38
Link Here
|
32 |
|
32 |
|
33 |
#include "Imaging.h" |
33 |
#include "Imaging.h" |
34 |
|
34 |
|
35 |
|
|
|
36 |
#define R 0 |
35 |
#define R 0 |
37 |
#define G 1 |
36 |
#define G 1 |
38 |
#define B 2 |
37 |
#define B 2 |
Lines 188-194
unpack1IR(UINT8* out, const UINT8* in, int pixels)
Link Here
|
188 |
static void |
187 |
static void |
189 |
unpack18(UINT8* out, const UINT8* in, int pixels) |
188 |
unpack18(UINT8* out, const UINT8* in, int pixels) |
190 |
{ |
189 |
{ |
191 |
/* Unpack a '|b1' image, which is a numpy boolean. |
190 |
/* Unpack a '|b1' image, which is a numpy boolean. |
192 |
1 == true, 0==false, in bytes */ |
191 |
1 == true, 0==false, in bytes */ |
193 |
|
192 |
|
194 |
int i; |
193 |
int i; |
Lines 329-338
static void
Link Here
|
329 |
unpackLA(UINT8* _out, const UINT8* in, int pixels) |
328 |
unpackLA(UINT8* _out, const UINT8* in, int pixels) |
330 |
{ |
329 |
{ |
331 |
int i; |
330 |
int i; |
332 |
UINT32* out = (UINT32*) _out; |
|
|
333 |
/* LA, pixel interleaved */ |
331 |
/* LA, pixel interleaved */ |
334 |
for (i = 0; i < pixels; i++) { |
332 |
for (i = 0; i < pixels; i++) { |
335 |
out[i] = MAKE_UINT32(in[0], in[0], in[0], in[1]); |
333 |
UINT32 iv = MAKE_UINT32(in[0], in[0], in[0], in[1]); |
|
|
334 |
memcpy(_out + i + sizeof(iv), &iv, sizeof(iv)); |
336 |
in += 2; |
335 |
in += 2; |
337 |
} |
336 |
} |
338 |
} |
337 |
} |
Lines 341-350
static void
Link Here
|
341 |
unpackLAL(UINT8* _out, const UINT8* in, int pixels) |
340 |
unpackLAL(UINT8* _out, const UINT8* in, int pixels) |
342 |
{ |
341 |
{ |
343 |
int i; |
342 |
int i; |
344 |
UINT32* out = (UINT32*) _out; |
|
|
345 |
/* LA, line interleaved */ |
343 |
/* LA, line interleaved */ |
346 |
for (i = 0; i < pixels; i++) { |
344 |
for (i = 0; i < pixels; i++) { |
347 |
out[i] = MAKE_UINT32(in[i], in[i], in[i], in[i+pixels]); |
345 |
UINT32 iv = MAKE_UINT32(in[i], in[i], in[i], in[i+pixels]); |
|
|
346 |
memcpy(_out + i + sizeof(iv), &iv, sizeof(iv)); |
348 |
} |
347 |
} |
349 |
} |
348 |
} |
350 |
|
349 |
|
Lines 482-495
void
Link Here
|
482 |
ImagingUnpackRGB(UINT8* _out, const UINT8* in, int pixels) |
481 |
ImagingUnpackRGB(UINT8* _out, const UINT8* in, int pixels) |
483 |
{ |
482 |
{ |
484 |
int i = 0; |
483 |
int i = 0; |
485 |
UINT32* out = (UINT32*) _out; |
|
|
486 |
/* RGB triplets */ |
484 |
/* RGB triplets */ |
487 |
for (; i < pixels-1; i++) { |
485 |
for (; i < pixels-1; i++) { |
488 |
out[i] = MASK_UINT32_CHANNEL_3 | *(UINT32*)&in[0]; |
486 |
UINT32 iv; |
|
|
487 |
memcpy(&iv, in, sizeof(iv)); |
488 |
iv |= MASK_UINT32_CHANNEL_3; |
489 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
489 |
in += 3; |
490 |
in += 3; |
490 |
} |
491 |
} |
491 |
for (; i < pixels; i++) { |
492 |
for (; i < pixels; i++) { |
492 |
out[i] = MAKE_UINT32(in[0], in[1], in[2], 255); |
493 |
UINT32 iv = MAKE_UINT32(in[0], in[1], in[2], 255); |
|
|
494 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
493 |
in += 3; |
495 |
in += 3; |
494 |
} |
496 |
} |
495 |
} |
497 |
} |
Lines 498-507
void
Link Here
|
498 |
unpackRGB16L(UINT8* _out, const UINT8* in, int pixels) |
500 |
unpackRGB16L(UINT8* _out, const UINT8* in, int pixels) |
499 |
{ |
501 |
{ |
500 |
int i; |
502 |
int i; |
501 |
UINT32* out = (UINT32*) _out; |
|
|
502 |
/* 16-bit RGB triplets, little-endian order */ |
503 |
/* 16-bit RGB triplets, little-endian order */ |
503 |
for (i = 0; i < pixels; i++) { |
504 |
for (i = 0; i < pixels; i++) { |
504 |
out[i] = MAKE_UINT32(in[1], in[3], in[5], 255); |
505 |
UINT32 iv = MAKE_UINT32(in[1], in[3], in[5], 255); |
|
|
506 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
505 |
in += 6; |
507 |
in += 6; |
506 |
} |
508 |
} |
507 |
} |
509 |
} |
Lines 510-519
void
Link Here
|
510 |
unpackRGB16B(UINT8* _out, const UINT8* in, int pixels) |
512 |
unpackRGB16B(UINT8* _out, const UINT8* in, int pixels) |
511 |
{ |
513 |
{ |
512 |
int i; |
514 |
int i; |
513 |
UINT32* out = (UINT32*) _out; |
|
|
514 |
/* 16-bit RGB triplets, big-endian order */ |
515 |
/* 16-bit RGB triplets, big-endian order */ |
515 |
for (i = 0; i < pixels; i++) { |
516 |
for (i = 0; i < pixels; i++) { |
516 |
out[i] = MAKE_UINT32(in[0], in[2], in[4], 255); |
517 |
UINT32 iv = MAKE_UINT32(in[0], in[2], in[4], 255); |
|
|
518 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
517 |
in += 6; |
519 |
in += 6; |
518 |
} |
520 |
} |
519 |
} |
521 |
} |
Lines 522-531
static void
Link Here
|
522 |
unpackRGBL(UINT8* _out, const UINT8* in, int pixels) |
524 |
unpackRGBL(UINT8* _out, const UINT8* in, int pixels) |
523 |
{ |
525 |
{ |
524 |
int i; |
526 |
int i; |
525 |
UINT32* out = (UINT32*) _out; |
|
|
526 |
/* RGB, line interleaved */ |
527 |
/* RGB, line interleaved */ |
527 |
for (i = 0; i < pixels; i++) { |
528 |
for (i = 0; i < pixels; i++) { |
528 |
out[i] = MAKE_UINT32(in[i], in[i+pixels], in[i+pixels+pixels], 255); |
529 |
UINT32 iv = MAKE_UINT32(in[i], in[i+pixels], in[i+pixels+pixels], 255); |
|
|
530 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
529 |
} |
531 |
} |
530 |
} |
532 |
} |
531 |
|
533 |
|
Lines 533-543
static void
Link Here
|
533 |
unpackRGBR(UINT8* _out, const UINT8* in, int pixels) |
535 |
unpackRGBR(UINT8* _out, const UINT8* in, int pixels) |
534 |
{ |
536 |
{ |
535 |
int i; |
537 |
int i; |
536 |
UINT32* out = (UINT32*) _out; |
|
|
537 |
/* RGB, bit reversed */ |
538 |
/* RGB, bit reversed */ |
538 |
for (i = 0; i < pixels; i++) { |
539 |
for (i = 0; i < pixels; i++) { |
539 |
out[i] = MAKE_UINT32(BITFLIP[in[0]], BITFLIP[in[1]], |
540 |
UINT32 iv = MAKE_UINT32(BITFLIP[in[0]], BITFLIP[in[1]], |
540 |
BITFLIP[in[2]], 255); |
541 |
BITFLIP[in[2]], 255); |
|
|
542 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
541 |
in += 3; |
543 |
in += 3; |
542 |
} |
544 |
} |
543 |
} |
545 |
} |
Lines 546-555
void
Link Here
|
546 |
ImagingUnpackBGR(UINT8* _out, const UINT8* in, int pixels) |
548 |
ImagingUnpackBGR(UINT8* _out, const UINT8* in, int pixels) |
547 |
{ |
549 |
{ |
548 |
int i; |
550 |
int i; |
549 |
UINT32* out = (UINT32*) _out; |
|
|
550 |
/* RGB, reversed bytes */ |
551 |
/* RGB, reversed bytes */ |
551 |
for (i = 0; i < pixels; i++) { |
552 |
for (i = 0; i < pixels; i++) { |
552 |
out[i] = MAKE_UINT32(in[2], in[1], in[0], 255); |
553 |
UINT32 iv = MAKE_UINT32(in[2], in[1], in[0], 255); |
|
|
554 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
553 |
in += 3; |
555 |
in += 3; |
554 |
} |
556 |
} |
555 |
} |
557 |
} |
Lines 678-687
static void
Link Here
|
678 |
ImagingUnpackBGRX(UINT8* _out, const UINT8* in, int pixels) |
680 |
ImagingUnpackBGRX(UINT8* _out, const UINT8* in, int pixels) |
679 |
{ |
681 |
{ |
680 |
int i; |
682 |
int i; |
681 |
UINT32* out = (UINT32*) _out; |
|
|
682 |
/* RGB, reversed bytes with padding */ |
683 |
/* RGB, reversed bytes with padding */ |
683 |
for (i = 0; i < pixels; i++) { |
684 |
for (i = 0; i < pixels; i++) { |
684 |
out[i] = MAKE_UINT32(in[2], in[1], in[0], 255); |
685 |
UINT32 iv = MAKE_UINT32(in[2], in[1], in[0], 255); |
|
|
686 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
685 |
in += 4; |
687 |
in += 4; |
686 |
} |
688 |
} |
687 |
} |
689 |
} |
Lines 690-699
static void
Link Here
|
690 |
ImagingUnpackXRGB(UINT8* _out, const UINT8* in, int pixels) |
692 |
ImagingUnpackXRGB(UINT8* _out, const UINT8* in, int pixels) |
691 |
{ |
693 |
{ |
692 |
int i; |
694 |
int i; |
693 |
UINT32* out = (UINT32*) _out; |
|
|
694 |
/* RGB, leading pad */ |
695 |
/* RGB, leading pad */ |
695 |
for (i = 0; i < pixels; i++) { |
696 |
for (i = 0; i < pixels; i++) { |
696 |
out[i] = MAKE_UINT32(in[1], in[2], in[3], 255); |
697 |
UINT32 iv = MAKE_UINT32(in[1], in[2], in[3], 255); |
|
|
698 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
697 |
in += 4; |
699 |
in += 4; |
698 |
} |
700 |
} |
699 |
} |
701 |
} |
Lines 702-711
static void
Link Here
|
702 |
ImagingUnpackXBGR(UINT8* _out, const UINT8* in, int pixels) |
704 |
ImagingUnpackXBGR(UINT8* _out, const UINT8* in, int pixels) |
703 |
{ |
705 |
{ |
704 |
int i; |
706 |
int i; |
705 |
UINT32* out = (UINT32*) _out; |
|
|
706 |
/* RGB, reversed bytes, leading pad */ |
707 |
/* RGB, reversed bytes, leading pad */ |
707 |
for (i = 0; i < pixels; i++) { |
708 |
for (i = 0; i < pixels; i++) { |
708 |
out[i] = MAKE_UINT32(in[3], in[2], in[1], 255); |
709 |
UINT32 iv = MAKE_UINT32(in[3], in[2], in[1], 255); |
|
|
710 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
709 |
in += 4; |
711 |
in += 4; |
710 |
} |
712 |
} |
711 |
} |
713 |
} |
Lines 716-725
static void
Link Here
|
716 |
unpackRGBALA(UINT8* _out, const UINT8* in, int pixels) |
718 |
unpackRGBALA(UINT8* _out, const UINT8* in, int pixels) |
717 |
{ |
719 |
{ |
718 |
int i; |
720 |
int i; |
719 |
UINT32* out = (UINT32*) _out; |
|
|
720 |
/* greyscale with alpha */ |
721 |
/* greyscale with alpha */ |
721 |
for (i = 0; i < pixels; i++) { |
722 |
for (i = 0; i < pixels; i++) { |
722 |
out[i] = MAKE_UINT32(in[0], in[0], in[0], in[1]); |
723 |
UINT32 iv = MAKE_UINT32(in[0], in[0], in[0], 255); |
|
|
724 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
723 |
in += 2; |
725 |
in += 2; |
724 |
} |
726 |
} |
725 |
} |
727 |
} |
Lines 728-737
static void
Link Here
|
728 |
unpackRGBALA16B(UINT8* _out, const UINT8* in, int pixels) |
730 |
unpackRGBALA16B(UINT8* _out, const UINT8* in, int pixels) |
729 |
{ |
731 |
{ |
730 |
int i; |
732 |
int i; |
731 |
UINT32* out = (UINT32*) _out; |
|
|
732 |
/* 16-bit greyscale with alpha, big-endian */ |
733 |
/* 16-bit greyscale with alpha, big-endian */ |
733 |
for (i = 0; i < pixels; i++) { |
734 |
for (i = 0; i < pixels; i++) { |
734 |
out[i] = MAKE_UINT32(in[0], in[0], in[0], in[2]); |
735 |
UINT32 iv = MAKE_UINT32(in[0], in[0], in[0], in[2]); |
|
|
736 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
735 |
in += 4; |
737 |
in += 4; |
736 |
} |
738 |
} |
737 |
} |
739 |
} |
Lines 740-758
static void
Link Here
|
740 |
unpackRGBa16L(UINT8* _out, const UINT8* in, int pixels) |
742 |
unpackRGBa16L(UINT8* _out, const UINT8* in, int pixels) |
741 |
{ |
743 |
{ |
742 |
int i; |
744 |
int i; |
743 |
UINT32* out = (UINT32*) _out; |
|
|
744 |
/* premultiplied 16-bit RGBA, little-endian */ |
745 |
/* premultiplied 16-bit RGBA, little-endian */ |
745 |
for (i = 0; i < pixels; i++) { |
746 |
for (i = 0; i < pixels; i++) { |
746 |
int a = in[7]; |
747 |
int a = in[7]; |
|
|
748 |
UINT32 iv; |
747 |
if ( ! a) { |
749 |
if ( ! a) { |
748 |
out[i] = 0; |
750 |
iv = 0; |
749 |
} else if (a == 255) { |
751 |
} else if (a == 255) { |
750 |
out[i] = MAKE_UINT32(in[1], in[3], in[5], a); |
752 |
iv = MAKE_UINT32(in[1], in[3], in[5], a); |
751 |
} else { |
753 |
} else { |
752 |
out[i] = MAKE_UINT32(CLIP(in[1] * 255 / a), |
754 |
iv = MAKE_UINT32(CLIP(in[1] * 255 / a), |
753 |
CLIP(in[3] * 255 / a), |
755 |
CLIP(in[3] * 255 / a), |
754 |
CLIP(in[5] * 255 / a), a); |
756 |
CLIP(in[5] * 255 / a), a); |
755 |
} |
757 |
} |
|
|
758 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
756 |
in += 8; |
759 |
in += 8; |
757 |
} |
760 |
} |
758 |
} |
761 |
} |
Lines 761-779
static void
Link Here
|
761 |
unpackRGBa16B(UINT8* _out, const UINT8* in, int pixels) |
764 |
unpackRGBa16B(UINT8* _out, const UINT8* in, int pixels) |
762 |
{ |
765 |
{ |
763 |
int i; |
766 |
int i; |
764 |
UINT32* out = (UINT32*) _out; |
|
|
765 |
/* premultiplied 16-bit RGBA, big-endian */ |
767 |
/* premultiplied 16-bit RGBA, big-endian */ |
766 |
for (i = 0; i < pixels; i++) { |
768 |
for (i = 0; i < pixels; i++) { |
767 |
int a = in[6]; |
769 |
int a = in[6]; |
|
|
770 |
UINT32 iv; |
768 |
if ( ! a) { |
771 |
if ( ! a) { |
769 |
out[i] = 0; |
772 |
iv = 0; |
770 |
} else if (a == 255) { |
773 |
} else if (a == 255) { |
771 |
out[i] = MAKE_UINT32(in[0], in[2], in[4], a); |
774 |
iv = MAKE_UINT32(in[0], in[2], in[4], a); |
772 |
} else { |
775 |
} else { |
773 |
out[i] = MAKE_UINT32(CLIP(in[0] * 255 / a), |
776 |
iv = MAKE_UINT32(CLIP(in[0] * 255 / a), |
774 |
CLIP(in[2] * 255 / a), |
777 |
CLIP(in[2] * 255 / a), |
775 |
CLIP(in[4] * 255 / a), a); |
778 |
CLIP(in[4] * 255 / a), a); |
776 |
} |
779 |
} |
|
|
780 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
777 |
in += 8; |
781 |
in += 8; |
778 |
} |
782 |
} |
779 |
} |
783 |
} |
Lines 782-800
static void
Link Here
|
782 |
unpackRGBa(UINT8* _out, const UINT8* in, int pixels) |
786 |
unpackRGBa(UINT8* _out, const UINT8* in, int pixels) |
783 |
{ |
787 |
{ |
784 |
int i; |
788 |
int i; |
785 |
UINT32* out = (UINT32*) _out; |
|
|
786 |
/* premultiplied RGBA */ |
789 |
/* premultiplied RGBA */ |
787 |
for (i = 0; i < pixels; i++) { |
790 |
for (i = 0; i < pixels; i++) { |
788 |
int a = in[3]; |
791 |
int a = in[3]; |
|
|
792 |
UINT32 iv; |
789 |
if ( ! a) { |
793 |
if ( ! a) { |
790 |
out[i] = 0; |
794 |
iv = 0; |
791 |
} else if (a == 255) { |
795 |
} else if (a == 255) { |
792 |
out[i] = MAKE_UINT32(in[0], in[1], in[2], a); |
796 |
iv = MAKE_UINT32(in[0], in[1], in[2], a); |
793 |
} else { |
797 |
} else { |
794 |
out[i] = MAKE_UINT32(CLIP(in[0] * 255 / a), |
798 |
iv = MAKE_UINT32(CLIP(in[0] * 255 / a), |
795 |
CLIP(in[1] * 255 / a), |
799 |
CLIP(in[1] * 255 / a), |
796 |
CLIP(in[2] * 255 / a), a); |
800 |
CLIP(in[2] * 255 / a), a); |
797 |
} |
801 |
} |
|
|
802 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
798 |
in += 4; |
803 |
in += 4; |
799 |
} |
804 |
} |
800 |
} |
805 |
} |
Lines 803-821
static void
Link Here
|
803 |
unpackBGRa(UINT8* _out, const UINT8* in, int pixels) |
808 |
unpackBGRa(UINT8* _out, const UINT8* in, int pixels) |
804 |
{ |
809 |
{ |
805 |
int i; |
810 |
int i; |
806 |
UINT32* out = (UINT32*) _out; |
|
|
807 |
/* premultiplied BGRA */ |
811 |
/* premultiplied BGRA */ |
808 |
for (i = 0; i < pixels; i++) { |
812 |
for (i = 0; i < pixels; i++) { |
809 |
int a = in[3]; |
813 |
int a = in[3]; |
|
|
814 |
UINT32 iv; |
810 |
if ( ! a) { |
815 |
if ( ! a) { |
811 |
out[i] = 0; |
816 |
iv = 0; |
812 |
} else if (a == 255) { |
817 |
} else if (a == 255) { |
813 |
out[i] = MAKE_UINT32(in[2], in[1], in[0], a); |
818 |
iv = MAKE_UINT32(in[2], in[1], in[0], a); |
814 |
} else { |
819 |
} else { |
815 |
out[i] = MAKE_UINT32(CLIP(in[2] * 255 / a), |
820 |
iv = MAKE_UINT32(CLIP(in[2] * 255 / a), |
816 |
CLIP(in[1] * 255 / a), |
821 |
CLIP(in[1] * 255 / a), |
817 |
CLIP(in[0] * 255 / a), a); |
822 |
CLIP(in[0] * 255 / a), a); |
818 |
} |
823 |
} |
|
|
824 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
819 |
in += 4; |
825 |
in += 4; |
820 |
} |
826 |
} |
821 |
} |
827 |
} |
Lines 838-848
static void
Link Here
|
838 |
unpackRGBAL(UINT8* _out, const UINT8* in, int pixels) |
844 |
unpackRGBAL(UINT8* _out, const UINT8* in, int pixels) |
839 |
{ |
845 |
{ |
840 |
int i; |
846 |
int i; |
841 |
UINT32* out = (UINT32*) _out; |
|
|
842 |
/* RGBA, line interleaved */ |
847 |
/* RGBA, line interleaved */ |
843 |
for (i = 0; i < pixels; i++) { |
848 |
for (i = 0; i < pixels; i++) { |
844 |
out[i] = MAKE_UINT32(in[i], in[i+pixels], in[i+pixels+pixels], |
849 |
UINT32 iv = MAKE_UINT32(in[i], in[i+pixels], in[i+pixels+pixels], |
845 |
in[i+pixels+pixels+pixels]); |
850 |
in[i+pixels+pixels+pixels]); |
|
|
851 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
846 |
} |
852 |
} |
847 |
} |
853 |
} |
848 |
|
854 |
|
Lines 850-859
void
Link Here
|
850 |
unpackRGBA16L(UINT8* _out, const UINT8* in, int pixels) |
856 |
unpackRGBA16L(UINT8* _out, const UINT8* in, int pixels) |
851 |
{ |
857 |
{ |
852 |
int i; |
858 |
int i; |
853 |
UINT32* out = (UINT32*) _out; |
|
|
854 |
/* 16-bit RGBA, little-endian order */ |
859 |
/* 16-bit RGBA, little-endian order */ |
855 |
for (i = 0; i < pixels; i++) { |
860 |
for (i = 0; i < pixels; i++) { |
856 |
out[i] = MAKE_UINT32(in[1], in[3], in[5], in[7]); |
861 |
UINT32 iv = MAKE_UINT32(in[1], in[3], in[5], in[7]); |
|
|
862 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
857 |
in += 8; |
863 |
in += 8; |
858 |
} |
864 |
} |
859 |
} |
865 |
} |
Lines 862-871
void
Link Here
|
862 |
unpackRGBA16B(UINT8* _out, const UINT8* in, int pixels) |
868 |
unpackRGBA16B(UINT8* _out, const UINT8* in, int pixels) |
863 |
{ |
869 |
{ |
864 |
int i; |
870 |
int i; |
865 |
UINT32* out = (UINT32*) _out; |
|
|
866 |
/* 16-bit RGBA, big-endian order */ |
871 |
/* 16-bit RGBA, big-endian order */ |
867 |
for (i = 0; i < pixels; i++) { |
872 |
for (i = 0; i < pixels; i++) { |
868 |
out[i] = MAKE_UINT32(in[0], in[2], in[4], in[6]); |
873 |
UINT32 iv = MAKE_UINT32(in[0], in[2], in[4], in[6]); |
|
|
874 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
869 |
in += 8; |
875 |
in += 8; |
870 |
} |
876 |
} |
871 |
} |
877 |
} |
Lines 874-883
static void
Link Here
|
874 |
unpackARGB(UINT8* _out, const UINT8* in, int pixels) |
880 |
unpackARGB(UINT8* _out, const UINT8* in, int pixels) |
875 |
{ |
881 |
{ |
876 |
int i; |
882 |
int i; |
877 |
UINT32* out = (UINT32*) _out; |
|
|
878 |
/* RGBA, leading pad */ |
883 |
/* RGBA, leading pad */ |
879 |
for (i = 0; i < pixels; i++) { |
884 |
for (i = 0; i < pixels; i++) { |
880 |
out[i] = MAKE_UINT32(in[1], in[2], in[3], in[0]); |
885 |
UINT32 iv = MAKE_UINT32(in[1], in[2], in[3], in[0]); |
|
|
886 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
881 |
in += 4; |
887 |
in += 4; |
882 |
} |
888 |
} |
883 |
} |
889 |
} |
Lines 886-895
static void
Link Here
|
886 |
unpackABGR(UINT8* _out, const UINT8* in, int pixels) |
892 |
unpackABGR(UINT8* _out, const UINT8* in, int pixels) |
887 |
{ |
893 |
{ |
888 |
int i; |
894 |
int i; |
889 |
UINT32* out = (UINT32*) _out; |
|
|
890 |
/* RGBA, reversed bytes */ |
895 |
/* RGBA, reversed bytes */ |
891 |
for (i = 0; i < pixels; i++) { |
896 |
for (i = 0; i < pixels; i++) { |
892 |
out[i] = MAKE_UINT32(in[3], in[2], in[1], in[0]); |
897 |
UINT32 iv = MAKE_UINT32(in[3], in[2], in[1], in[0]); |
|
|
898 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
893 |
in += 4; |
899 |
in += 4; |
894 |
} |
900 |
} |
895 |
} |
901 |
} |
Lines 898-907
static void
Link Here
|
898 |
unpackBGRA(UINT8* _out, const UINT8* in, int pixels) |
904 |
unpackBGRA(UINT8* _out, const UINT8* in, int pixels) |
899 |
{ |
905 |
{ |
900 |
int i; |
906 |
int i; |
901 |
UINT32* out = (UINT32*) _out; |
|
|
902 |
/* RGBA, reversed bytes */ |
907 |
/* RGBA, reversed bytes */ |
903 |
for (i = 0; i < pixels; i++) { |
908 |
for (i = 0; i < pixels; i++) { |
904 |
out[i] = MAKE_UINT32(in[2], in[1], in[0], in[3]); |
909 |
UINT32 iv = MAKE_UINT32(in[2], in[1], in[0], in[3]); |
|
|
910 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
905 |
in += 4; |
911 |
in += 4; |
906 |
} |
912 |
} |
907 |
} |
913 |
} |
Lines 913-922
static void
Link Here
|
913 |
unpackCMYKI(UINT8* _out, const UINT8* in, int pixels) |
919 |
unpackCMYKI(UINT8* _out, const UINT8* in, int pixels) |
914 |
{ |
920 |
{ |
915 |
int i; |
921 |
int i; |
916 |
UINT32* out = (UINT32*) _out; |
|
|
917 |
/* CMYK, inverted bytes (Photoshop 2.5) */ |
922 |
/* CMYK, inverted bytes (Photoshop 2.5) */ |
918 |
for (i = 0; i < pixels; i++) { |
923 |
for (i = 0; i < pixels; i++) { |
919 |
out[i] = ~MAKE_UINT32(in[0], in[1], in[2], in[3]); |
924 |
UINT32 iv = ~MAKE_UINT32(in[0], in[1], in[2], in[3]); |
|
|
925 |
memcpy(_out + i * sizeof(iv), &iv, sizeof(iv)); |
920 |
in += 4; |
926 |
in += 4; |
921 |
} |
927 |
} |
922 |
} |
928 |
} |
Lines 991-1020
unpackI12_I16(UINT8* out, const UINT8* in, int pixels){
Link Here
|
991 |
#ifdef WORDS_BIGENDIAN |
997 |
#ifdef WORDS_BIGENDIAN |
992 |
UINT8* tmp = (UINT8 *)&pixel; |
998 |
UINT8* tmp = (UINT8 *)&pixel; |
993 |
#endif |
999 |
#endif |
994 |
UINT16* out16 = (UINT16 *)out; |
|
|
995 |
for (i = 0; i < pixels-1; i+=2) { |
1000 |
for (i = 0; i < pixels-1; i+=2) { |
996 |
pixel = (((UINT16) in[0]) << 4 ) + (in[1] >>4); |
1001 |
pixel = (((UINT16) in[0]) << 4 ) + (in[1] >>4); |
997 |
#ifdef WORDS_BIGENDIAN |
1002 |
#ifdef WORDS_BIGENDIAN |
998 |
out[0] = tmp[1]; out[1] = tmp[0]; |
1003 |
out[0] = tmp[1]; out[1] = tmp[0]; |
999 |
#else |
1004 |
#else |
1000 |
out16[0] = pixel; |
1005 |
memcpy(out, &pixel, sizeof(pixel)); |
1001 |
#endif |
1006 |
#endif |
1002 |
|
1007 |
|
1003 |
pixel = (((UINT16) (in[1] & 0x0F)) << 8) + in[2]; |
1008 |
pixel = (((UINT16) (in[1] & 0x0F)) << 8) + in[2]; |
1004 |
#ifdef WORDS_BIGENDIAN |
1009 |
#ifdef WORDS_BIGENDIAN |
1005 |
out[2] = tmp[1]; out[3] = tmp[0]; |
1010 |
out[2] = tmp[1]; out[3] = tmp[0]; |
1006 |
#else |
1011 |
#else |
1007 |
out16[1] = pixel; |
1012 |
memcpy(out + sizeof(pixel), &pixel, sizeof(pixel)); |
1008 |
#endif |
1013 |
#endif |
1009 |
|
1014 |
|
1010 |
in += 3; out16 += 2; out+=4; |
1015 |
in += 3; out+=4; |
1011 |
} |
1016 |
} |
1012 |
if (i == pixels-1) { |
1017 |
if (i == pixels-1) { |
1013 |
pixel = (((UINT16) in[0]) << 4 ) + (in[1] >>4); |
1018 |
pixel = (((UINT16) in[0]) << 4 ) + (in[1] >>4); |
1014 |
#ifdef WORDS_BIGENDIAN |
1019 |
#ifdef WORDS_BIGENDIAN |
1015 |
out[0] = tmp[1]; out[1] = tmp[0]; |
1020 |
out[0] = tmp[1]; out[1] = tmp[0]; |
1016 |
#else |
1021 |
#else |
1017 |
out16[0] = pixel; |
1022 |
memcpy(out, &pixel, sizeof(pixel)); |
1018 |
#endif |
1023 |
#endif |
1019 |
} |
1024 |
} |
1020 |
} |
1025 |
} |
1021 |
- |
|
|