572
591
image->filename);
573
592
black=pow(10.0,(reference_black-reference_white)*(gamma/density)*
594
#if defined(MAGICKCORE_OPENMP_SUPPORT)
595
#pragma omp parallel for schedule(dynamic,4)
575
597
for (i=0; i <= (long) MaxMap; i++)
576
598
logmap[i]=ScaleMapToQuantum((MagickRealType) (MaxMap*(reference_white+
577
log10(black+((double) i/MaxMap)*(1.0-black))/((gamma/density)*
599
log10(black+((MagickRealType) i/MaxMap)*(1.0-black))/((gamma/density)*
578
600
0.002/0.6))/1024.0+0.5));
579
image_view=AcquireCacheViewThreadSet(image);
601
image_view=AcquireCacheView(image);
580
602
#if defined(MAGICKCORE_OPENMP_SUPPORT)
581
#pragma omp parallel for schedule(static,64) shared(status)
603
#pragma omp parallel for schedule(dynamic,4) shared(status)
583
605
for (y=0; y < (long) image->rows; y++)
589
610
register PixelPacket
619
641
Allocate the tables.
621
x_map=(PrimaryInfo *) AcquireQuantumMemory((size_t) MaxMap+1UL,
643
x_map=(TransformPacket *) AcquireQuantumMemory((size_t) MaxMap+1UL,
623
y_map=(PrimaryInfo *) AcquireQuantumMemory((size_t) MaxMap+1UL,
645
y_map=(TransformPacket *) AcquireQuantumMemory((size_t) MaxMap+1UL,
625
z_map=(PrimaryInfo *) AcquireQuantumMemory((size_t) MaxMap+1UL,
647
z_map=(TransformPacket *) AcquireQuantumMemory((size_t) MaxMap+1UL,
627
if ((x_map == (PrimaryInfo *) NULL) || (y_map == (PrimaryInfo *) NULL) ||
628
(z_map == (PrimaryInfo *) NULL))
649
if ((x_map == (TransformPacket *) NULL) ||
650
(y_map == (TransformPacket *) NULL) ||
651
(z_map == (TransformPacket *) NULL))
629
652
ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
630
653
image->filename);
631
654
(void) ResetMagickMemory(&primary_info,0,sizeof(primary_info));
646
669
primary_info.y=(double) (MaxMap+1.0)/2.0;
647
670
primary_info.z=(double) (MaxMap+1.0)/2.0;
671
#if defined(MAGICKCORE_OPENMP_SUPPORT)
672
#pragma omp parallel for schedule(dynamic,4)
648
674
for (i=0; i <= (long) MaxMap; i++)
650
x_map[i].x=0.33333*i;
651
y_map[i].x=0.33334*i;
652
z_map[i].x=0.33333*i;
653
x_map[i].y=0.50000*i;
654
y_map[i].y=0.00000*i;
655
z_map[i].y=(-0.50000)*i;
656
x_map[i].z=(-0.25000)*i;
657
y_map[i].z=0.50000*i;
658
z_map[i].z=(-0.25000)*i;
676
x_map[i].x=0.33333f*(MagickRealType) i;
677
y_map[i].x=0.33334f*(MagickRealType) i;
678
z_map[i].x=0.33333f*(MagickRealType) i;
679
x_map[i].y=0.50000f*(MagickRealType) i;
680
y_map[i].y=0.00000f*(MagickRealType) i;
681
z_map[i].y=(-0.50000f)*(MagickRealType) i;
682
x_map[i].z=(-0.25000f)*(MagickRealType) i;
683
y_map[i].z=0.50000f*(MagickRealType) i;
684
z_map[i].z=(-0.25000f)*(MagickRealType) i;
668
694
G = 0.29900*R+0.58700*G+0.11400*B
696
#if defined(MAGICKCORE_OPENMP_SUPPORT)
697
#pragma omp parallel for schedule(dynamic,4)
670
699
for (i=0; i <= (long) MaxMap; i++)
672
x_map[i].x=0.29900*i;
673
y_map[i].x=0.58700*i;
674
z_map[i].x=0.11400*i;
675
x_map[i].y=0.29900*i;
676
y_map[i].y=0.58700*i;
677
z_map[i].y=0.11400*i;
678
x_map[i].z=0.29900*i;
679
y_map[i].z=0.58700*i;
680
z_map[i].z=0.11400*i;
701
x_map[i].x=0.29900f*(MagickRealType) i;
702
y_map[i].x=0.58700f*(MagickRealType) i;
703
z_map[i].x=0.11400f*(MagickRealType) i;
704
x_map[i].y=0.29900f*(MagickRealType) i;
705
y_map[i].y=0.58700f*(MagickRealType) i;
706
z_map[i].y=0.11400f*(MagickRealType) i;
707
x_map[i].z=0.29900f*(MagickRealType) i;
708
y_map[i].z=0.58700f*(MagickRealType) i;
709
z_map[i].z=0.11400f*(MagickRealType) i;
682
711
image->type=GrayscaleType;
698
727
primary_info.y=(double) (MaxMap+1.0)/2.0;
699
728
primary_info.z=(double) (MaxMap+1.0)/2.0;
729
#if defined(MAGICKCORE_OPENMP_SUPPORT)
730
#pragma omp parallel for schedule(dynamic,4)
700
732
for (i=0; i <= (long) MaxMap; i++)
702
x_map[i].x=0.299000*i;
703
y_map[i].x=0.587000*i;
704
z_map[i].x=0.114000*i;
705
x_map[i].y=(-0.168730)*i;
706
y_map[i].y=(-0.331264)*i;
707
z_map[i].y=0.500000*i;
708
x_map[i].z=0.500000*i;
709
y_map[i].z=(-0.418688)*i;
710
z_map[i].z=(-0.081312)*i;
734
x_map[i].x=0.299000f*(MagickRealType) i;
735
y_map[i].x=0.587000f*(MagickRealType) i;
736
z_map[i].x=0.114000f*(MagickRealType) i;
737
x_map[i].y=(-0.168730f)*(MagickRealType) i;
738
y_map[i].y=(-0.331264f)*(MagickRealType) i;
739
z_map[i].y=0.500000f*(MagickRealType) i;
740
x_map[i].z=0.500000f*(MagickRealType) i;
741
y_map[i].z=(-0.418688f)*(MagickRealType) i;
742
z_map[i].z=(-0.081312f)*(MagickRealType) i;
719
751
G = 0.21260*R+0.71520*G+0.07220*B
753
#if defined(MAGICKCORE_OPENMP_SUPPORT)
754
#pragma omp parallel for schedule(dynamic,4)
721
756
for (i=0; i <= (long) MaxMap; i++)
723
x_map[i].x=0.21260*i;
724
y_map[i].x=0.71520*i;
725
z_map[i].x=0.07220*i;
726
x_map[i].y=0.21260*i;
727
y_map[i].y=0.71520*i;
728
z_map[i].y=0.07220*i;
729
x_map[i].z=0.21260*i;
730
y_map[i].z=0.71520*i;
731
z_map[i].z=0.07220*i;
758
x_map[i].x=0.21260f*(MagickRealType) i;
759
y_map[i].x=0.71520f*(MagickRealType) i;
760
z_map[i].x=0.07220f*(MagickRealType) i;
761
x_map[i].y=0.21260f*(MagickRealType) i;
762
y_map[i].y=0.71520f*(MagickRealType) i;
763
z_map[i].y=0.07220f*(MagickRealType) i;
764
x_map[i].z=0.21260f*(MagickRealType) i;
765
y_map[i].z=0.71520f*(MagickRealType) i;
766
z_map[i].z=0.07220f*(MagickRealType) i;
747
782
primary_info.y=(double) (MaxMap+1.0)/2.0;
748
783
primary_info.z=(double) (MaxMap+1.0)/2.0;
784
#if defined(MAGICKCORE_OPENMP_SUPPORT)
785
#pragma omp parallel for schedule(dynamic,4)
749
787
for (i=0; i <= (long) MaxMap; i++)
751
x_map[i].x=0.212600*i;
752
y_map[i].x=0.715200*i;
753
z_map[i].x=0.072200*i;
754
x_map[i].y=(-0.114572)*i;
755
y_map[i].y=(-0.385428)*i;
756
z_map[i].y=0.500000*i;
757
x_map[i].z=0.500000*i;
758
y_map[i].z=(-0.454153)*i;
759
z_map[i].z=(-0.045847)*i;
789
x_map[i].x=0.212600f*(MagickRealType) i;
790
y_map[i].x=0.715200f*(MagickRealType) i;
791
z_map[i].x=0.072200f*(MagickRealType) i;
792
x_map[i].y=(-0.114572f)*(MagickRealType) i;
793
y_map[i].y=(-0.385428f)*(MagickRealType) i;
794
z_map[i].y=0.500000f*(MagickRealType) i;
795
x_map[i].z=0.500000f*(MagickRealType) i;
796
y_map[i].z=(-0.454153f)*(MagickRealType) i;
797
z_map[i].z=(-0.045847f)*(MagickRealType) i;
800
841
Y = 0.2126560*R+0.7151580*G+0.0721856*B
801
842
Z = 0.0193324*R+0.1191930*G+0.9504440*B
844
#if defined(MAGICKCORE_OPENMP_SUPPORT)
845
#pragma omp parallel for schedule(dynamic,4)
803
847
for (i=0; i <= (long) MaxMap; i++)
805
x_map[i].x=0.4124240*i;
806
y_map[i].x=0.3575790*i;
807
z_map[i].x=0.1804640*i;
808
x_map[i].y=0.2126560*i;
809
y_map[i].y=0.7151580*i;
810
z_map[i].y=0.0721856*i;
811
x_map[i].z=0.0193324*i;
812
y_map[i].z=0.1191930*i;
813
z_map[i].z=0.9504440*i;
849
x_map[i].x=0.4124240f*(MagickRealType) i;
850
y_map[i].x=0.3575790f*(MagickRealType) i;
851
z_map[i].x=0.1804640f*(MagickRealType) i;
852
x_map[i].y=0.2126560f*(MagickRealType) i;
853
y_map[i].y=0.7151580f*(MagickRealType) i;
854
z_map[i].y=0.0721856f*(MagickRealType) i;
855
x_map[i].z=0.0193324f*(MagickRealType) i;
856
y_map[i].z=0.1191930f*(MagickRealType) i;
857
z_map[i].z=0.9504440f*(MagickRealType) i;
829
873
primary_info.z=(double) ScaleQuantumToMap(ScaleCharToQuantum(137));
830
874
for (i=0; i <= (long) (0.018*MaxMap); i++)
832
x_map[i].x=0.003962014134275617*i;
833
y_map[i].x=0.007778268551236748*i;
834
z_map[i].x=0.001510600706713781*i;
835
x_map[i].y=(-0.002426619775463276)*i;
836
y_map[i].y=(-0.004763965913702149)*i;
837
z_map[i].y=0.007190585689165425*i;
838
x_map[i].z=0.006927257754597858*i;
839
y_map[i].z=(-0.005800713697502058)*i;
840
z_map[i].z=(-0.0011265440570958)*i;
876
x_map[i].x=0.003962014134275617f*(MagickRealType) i;
877
y_map[i].x=0.007778268551236748f*(MagickRealType) i;
878
z_map[i].x=0.001510600706713781f*(MagickRealType) i;
879
x_map[i].y=(-0.002426619775463276f)*(MagickRealType) i;
880
y_map[i].y=(-0.004763965913702149f)*(MagickRealType) i;
881
z_map[i].y=0.007190585689165425f*(MagickRealType) i;
882
x_map[i].z=0.006927257754597858f*(MagickRealType) i;
883
y_map[i].z=(-0.005800713697502058f)*(MagickRealType) i;
884
z_map[i].z=(-0.0011265440570958f)*(MagickRealType) i;
842
886
for ( ; i <= (long) MaxMap; i++)
844
x_map[i].x=0.2201118963486454*(1.099*i-0.099);
845
y_map[i].x=0.4321260306242638*(1.099*i-0.099);
846
z_map[i].x=0.08392226148409894*(1.099*i-0.099);
847
x_map[i].y=(-0.1348122097479598)*(1.099*i-0.099);
848
y_map[i].y=(-0.2646647729834528)*(1.099*i-0.099);
849
z_map[i].y=0.3994769827314126*(1.099*i-0.099);
850
x_map[i].z=0.3848476530332144*(1.099*i-0.099);
851
y_map[i].z=(-0.3222618720834477)*(1.099*i-0.099);
852
z_map[i].z=(-0.06258578094976668)*(1.099*i-0.099);
888
x_map[i].x=0.2201118963486454*(1.099f*(MagickRealType) i-0.099f);
889
y_map[i].x=0.4321260306242638*(1.099f*(MagickRealType) i-0.099f);
890
z_map[i].x=0.08392226148409894*(1.099f*(MagickRealType) i-0.099f);
891
x_map[i].y=(-0.1348122097479598)*(1.099f*(MagickRealType) i-0.099f);
892
y_map[i].y=(-0.2646647729834528)*(1.099f*(MagickRealType) i-0.099f);
893
z_map[i].y=0.3994769827314126*(1.099f*(MagickRealType) i-0.099f);
894
x_map[i].z=0.3848476530332144*(1.099f*(MagickRealType) i-0.099f);
895
y_map[i].z=(-0.3222618720834477)*(1.099f*(MagickRealType) i-0.099f);
896
z_map[i].z=(-0.06258578094976668)*(1.099f*(MagickRealType) i-0.099f);
868
912
primary_info.y=(double) (MaxMap+1.0)/2.0;
869
913
primary_info.z=(double) (MaxMap+1.0)/2.0;
914
#if defined(MAGICKCORE_OPENMP_SUPPORT)
915
#pragma omp parallel for schedule(dynamic,4)
870
917
for (i=0; i <= (long) MaxMap; i++)
872
x_map[i].x=0.29900*i;
873
y_map[i].x=0.58700*i;
874
z_map[i].x=0.11400*i;
875
x_map[i].y=0.59600*i;
876
y_map[i].y=(-0.27400)*i;
877
z_map[i].y=(-0.32200)*i;
878
x_map[i].z=0.21100*i;
879
y_map[i].z=(-0.52300)*i;
880
z_map[i].z=0.31200*i;
919
x_map[i].x=0.29900f*(MagickRealType) i;
920
y_map[i].x=0.58700f*(MagickRealType) i;
921
z_map[i].x=0.11400f*(MagickRealType) i;
922
x_map[i].y=0.59600f*(MagickRealType) i;
923
y_map[i].y=(-0.27400f)*(MagickRealType) i;
924
z_map[i].y=(-0.32200f)*(MagickRealType) i;
925
x_map[i].z=0.21100f*(MagickRealType) i;
926
y_map[i].z=(-0.52300f)*(MagickRealType) i;
927
z_map[i].z=0.31200f*(MagickRealType) i;
896
943
primary_info.y=(double) (MaxMap+1.0)/2.0;
897
944
primary_info.z=(double) (MaxMap+1.0)/2.0;
945
#if defined(MAGICKCORE_OPENMP_SUPPORT)
946
#pragma omp parallel for schedule(dynamic,4)
898
948
for (i=0; i <= (long) MaxMap; i++)
900
x_map[i].x=0.299000*i;
901
y_map[i].x=0.587000*i;
902
z_map[i].x=0.114000*i;
903
x_map[i].y=(-0.168736)*i;
904
y_map[i].y=(-0.331264)*i;
905
z_map[i].y=0.500000*i;
906
x_map[i].z=0.500000*i;
907
y_map[i].z=(-0.418688)*i;
908
z_map[i].z=(-0.081312)*i;
950
x_map[i].x=0.299000f*(MagickRealType) i;
951
y_map[i].x=0.587000f*(MagickRealType) i;
952
z_map[i].x=0.114000f*(MagickRealType) i;
953
x_map[i].y=(-0.168736f)*(MagickRealType) i;
954
y_map[i].y=(-0.331264f)*(MagickRealType) i;
955
z_map[i].y=0.500000f*(MagickRealType) i;
956
x_map[i].z=0.500000f*(MagickRealType) i;
957
y_map[i].z=(-0.418688f)*(MagickRealType) i;
958
z_map[i].z=(-0.081312f)*(MagickRealType) i;
925
975
primary_info.y=(double) (MaxMap+1.0)/2.0;
926
976
primary_info.z=(double) (MaxMap+1.0)/2.0;
977
#if defined(MAGICKCORE_OPENMP_SUPPORT)
978
#pragma omp parallel for schedule(dynamic,4)
927
980
for (i=0; i <= (long) MaxMap; i++)
929
x_map[i].x=0.29900*i;
930
y_map[i].x=0.58700*i;
931
z_map[i].x=0.11400*i;
932
x_map[i].y=(-0.14740)*i;
933
y_map[i].y=(-0.28950)*i;
934
z_map[i].y=0.43690*i;
935
x_map[i].z=0.61500*i;
936
y_map[i].z=(-0.51500)*i;
937
z_map[i].z=(-0.10000)*i;
982
x_map[i].x=0.29900f*(MagickRealType) i;
983
y_map[i].x=0.58700f*(MagickRealType) i;
984
z_map[i].x=0.11400f*(MagickRealType) i;
985
x_map[i].y=(-0.14740f)*(MagickRealType) i;
986
y_map[i].y=(-0.28950f)*(MagickRealType) i;
987
z_map[i].y=0.43690f*(MagickRealType) i;
988
x_map[i].z=0.61500f*(MagickRealType) i;
989
y_map[i].z=(-0.51500f)*(MagickRealType) i;
990
z_map[i].z=(-0.10000f)*(MagickRealType) i;
970
1018
register PixelPacket
1021
register unsigned long
973
1026
if (status == MagickFalse)
975
id=GetCacheViewThreadId();
976
q=GetCacheViewPixels(image_view[id],0,y,image->columns,1);
1028
q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
977
1030
if (q == (PixelPacket *) NULL)
979
1032
status=MagickFalse;
983
1035
for (x=0; x < (long) image->columns; x++)
985
pixel.red=x_map[ScaleQuantumToMap(q->red)].x+
986
y_map[ScaleQuantumToMap(q->green)].x+
987
z_map[ScaleQuantumToMap(q->blue)].x+primary_info.x;
988
pixel.green=x_map[ScaleQuantumToMap(q->red)].y+
989
y_map[ScaleQuantumToMap(q->green)].y+
990
z_map[ScaleQuantumToMap(q->blue)].y+primary_info.y;
991
pixel.blue=x_map[ScaleQuantumToMap(q->red)].z+
992
y_map[ScaleQuantumToMap(q->green)].z+
993
z_map[ScaleQuantumToMap(q->blue)].z+primary_info.z;
1037
red=ScaleQuantumToMap(q->red);
1038
green=ScaleQuantumToMap(q->green);
1039
blue=ScaleQuantumToMap(q->blue);
1040
pixel.red=(x_map[red].x+y_map[green].x+z_map[blue].x)+
1041
(MagickRealType) primary_info.x;
1042
pixel.green=(x_map[red].y+y_map[green].y+z_map[blue].y)+
1043
(MagickRealType) primary_info.y;
1044
pixel.blue=(x_map[red].z+y_map[green].z+z_map[blue].z)+
1045
(MagickRealType) primary_info.z;
994
1046
q->red=ScaleMapToQuantum(pixel.red);
995
1047
q->green=ScaleMapToQuantum(pixel.green);
996
1048
q->blue=ScaleMapToQuantum(pixel.blue);
999
if (SyncCacheViewPixels(image_view[id]) == MagickFalse)
1001
proceed=SetImageProgress(image,RGBTransformImageTag,y,image->rows);
1002
if (proceed == MagickFalse)
1051
sync=SyncCacheViewAuthenticPixels(image_view,exception);
1052
if (sync == MagickFalse)
1054
if (image->progress_monitor != (MagickProgressMonitor) NULL)
1059
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1060
#pragma omp critical (MagickCore_RGBTransformImage)
1062
proceed=SetImageProgress(image,RGBTransformImageTag,progress++,
1064
if (proceed == MagickFalse)
1005
image_view=DestroyCacheViewThreadSet(image_view);
1068
image_view=DestroyCacheView(image_view);
1008
1071
case PseudoClass:
1073
register unsigned long
1014
1079
Convert PseudoClass image.
1016
GetMagickPixelPacket(image,&zero);
1017
image_view=AcquireCacheViewThreadSet(image);
1081
image_view=AcquireCacheView(image);
1018
1082
for (i=0; i < (long) image->colors; i++)
1020
1084
MagickPixelPacket
1024
pixel.red=x_map[ScaleQuantumToMap(image->colormap[i].red)].x+
1025
y_map[ScaleQuantumToMap(image->colormap[i].green)].x+
1026
z_map[ScaleQuantumToMap(image->colormap[i].blue)].x+primary_info.x;
1027
pixel.green=x_map[ScaleQuantumToMap(image->colormap[i].red)].y+
1028
y_map[ScaleQuantumToMap(image->colormap[i].green)].y+
1029
z_map[ScaleQuantumToMap(image->colormap[i].blue)].y+primary_info.y;
1030
pixel.blue=x_map[ScaleQuantumToMap(image->colormap[i].red)].z+
1031
y_map[ScaleQuantumToMap(image->colormap[i].green)].z+
1032
z_map[ScaleQuantumToMap(image->colormap[i].blue)].z+primary_info.z;
1087
red=ScaleQuantumToMap(image->colormap[i].red);
1088
green=ScaleQuantumToMap(image->colormap[i].green);
1089
blue=ScaleQuantumToMap(image->colormap[i].blue);
1090
pixel.red=x_map[red].x+y_map[green].x+z_map[blue].x+primary_info.x;
1091
pixel.green=x_map[red].y+y_map[green].y+z_map[blue].y+primary_info.y;
1092
pixel.blue=x_map[red].z+y_map[green].z+z_map[blue].z+primary_info.z;
1033
1093
image->colormap[i].red=ScaleMapToQuantum(pixel.red);
1034
1094
image->colormap[i].green=ScaleMapToQuantum(pixel.green);
1035
1095
image->colormap[i].blue=ScaleMapToQuantum(pixel.blue);
1037
image_view=DestroyCacheViewThreadSet(image_view);
1097
image_view=DestroyCacheView(image_view);
1038
1098
(void) SyncImage(image);
1102
image->colorspace=colorspace;
1043
1104
Relinquish resources.
1045
z_map=(PrimaryInfo *) RelinquishMagickMemory(z_map);
1046
y_map=(PrimaryInfo *) RelinquishMagickMemory(y_map);
1047
x_map=(PrimaryInfo *) RelinquishMagickMemory(x_map);
1106
z_map=(TransformPacket *) RelinquishMagickMemory(z_map);
1107
y_map=(TransformPacket *) RelinquishMagickMemory(y_map);
1108
x_map=(TransformPacket *) RelinquishMagickMemory(x_map);
1048
1109
return(status);
1704
1791
Allocate the tables.
1706
x_map=(PrimaryInfo *) AcquireQuantumMemory((size_t) MaxMap+1UL,
1793
x_map=(TransformPacket *) AcquireQuantumMemory((size_t) MaxMap+1UL,
1707
1794
sizeof(*x_map));
1708
y_map=(PrimaryInfo *) AcquireQuantumMemory((size_t) MaxMap+1UL,
1795
y_map=(TransformPacket *) AcquireQuantumMemory((size_t) MaxMap+1UL,
1709
1796
sizeof(*y_map));
1710
z_map=(PrimaryInfo *) AcquireQuantumMemory((size_t) MaxMap+1UL,
1797
z_map=(TransformPacket *) AcquireQuantumMemory((size_t) MaxMap+1UL,
1711
1798
sizeof(*z_map));
1712
if ((x_map == (PrimaryInfo *) NULL) || (y_map == (PrimaryInfo *) NULL) ||
1713
(z_map == (PrimaryInfo *) NULL))
1799
if ((x_map == (TransformPacket *) NULL) ||
1800
(y_map == (TransformPacket *) NULL) ||
1801
(z_map == (TransformPacket *) NULL))
1715
if (z_map != (PrimaryInfo *) NULL)
1716
z_map=(PrimaryInfo *) RelinquishMagickMemory(z_map);
1717
if (y_map != (PrimaryInfo *) NULL)
1718
y_map=(PrimaryInfo *) RelinquishMagickMemory(y_map);
1719
if (x_map != (PrimaryInfo *) NULL)
1720
x_map=(PrimaryInfo *) RelinquishMagickMemory(x_map);
1803
if (z_map != (TransformPacket *) NULL)
1804
z_map=(TransformPacket *) RelinquishMagickMemory(z_map);
1805
if (y_map != (TransformPacket *) NULL)
1806
y_map=(TransformPacket *) RelinquishMagickMemory(y_map);
1807
if (x_map != (TransformPacket *) NULL)
1808
x_map=(TransformPacket *) RelinquishMagickMemory(x_map);
1721
1809
ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed",
1722
1810
image->filename);
1735
1823
I and Q, normally -0.5 through 0.5, must be normalized to the range 0
1736
1824
through QuantumRange.
1826
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1827
#pragma omp parallel for schedule(dynamic,4)
1738
1829
for (i=0; i <= (long) MaxMap; i++)
1740
x_map[i].x=(double) i;
1741
y_map[i].x=0.500000*(2.000000*i-MaxMap);
1742
z_map[i].x=(-0.333340)*(2.000000*i-MaxMap);
1743
x_map[i].y=(double) i;
1744
y_map[i].y=0.000000;
1745
z_map[i].y=0.666665*(2.000000*i-MaxMap);
1746
x_map[i].z=(double) i;
1747
y_map[i].z=(-0.500000)*(2.000000*i-MaxMap);
1748
z_map[i].z=(-0.333340)*(2.000000*i-MaxMap);
1831
x_map[i].x=(MagickRealType) i;
1832
y_map[i].x=0.500000f*(2.000000*(MagickRealType) i-(MagickRealType)
1834
z_map[i].x=(-0.333340f)*(2.000000f*(MagickRealType) i-(MagickRealType)
1836
x_map[i].y=(MagickRealType) i;
1837
y_map[i].y=0.000000f;
1838
z_map[i].y=0.666665f*(2.000000f*(MagickRealType) i-(MagickRealType)
1840
x_map[i].z=(MagickRealType) i;
1841
y_map[i].z=(-0.500000f)*(2.000000f*(MagickRealType) i-(MagickRealType)
1843
z_map[i].z=(-0.333340f)*(2.000000f*(MagickRealType) i-(MagickRealType)
1762
1858
Cb and Cr, normally -0.5 through 0.5, must be normalized to the range 0
1763
1859
through QuantumRange.
1861
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1862
#pragma omp parallel for schedule(dynamic,4)
1765
1864
for (i=0; i <= (long) MaxMap; i++)
1767
x_map[i].x=(double) i;
1768
y_map[i].x=0.000000;
1769
z_map[i].x=(1.402000*0.500000)*(2.000000*i-MaxMap);
1770
x_map[i].y=(double) i;
1771
y_map[i].y=(-0.344136*0.500000)*(2.000000*i-MaxMap);
1772
z_map[i].y=(-0.714136*0.500000)*(2.000000*i-MaxMap);
1773
x_map[i].z=(double) i;
1774
y_map[i].z=(1.772000*0.500000)*(2.000000*i-MaxMap);
1775
z_map[i].z=0.000000;
1866
x_map[i].x=(MagickRealType) i;
1867
y_map[i].x=0.000000f;
1868
z_map[i].x=(1.402000f*0.500000f)*(2.000000f*(MagickRealType) i-
1869
(MagickRealType) MaxMap);
1870
x_map[i].y=(MagickRealType) i;
1871
y_map[i].y=(-0.344136f*0.500000f)*(2.000000f*(MagickRealType) i-
1872
(MagickRealType) MaxMap);
1873
z_map[i].y=(-0.714136f*0.500000f)*(2.000000f*(MagickRealType) i-
1874
(MagickRealType) MaxMap);
1875
x_map[i].z=(MagickRealType) i;
1876
y_map[i].z=(1.772000f*0.500000f)*(2.000000f*(MagickRealType) i-
1877
(MagickRealType) MaxMap);
1878
z_map[i].z=0.000000f;
1788
1891
Cb and Cr, normally -0.5 through 0.5, must be normalized to the range 0
1789
1892
through QuantumRange.
1894
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1895
#pragma omp parallel for schedule(dynamic,4)
1791
1897
for (i=0; i <= (long) MaxMap; i++)
1793
x_map[i].x=(double) i;
1794
y_map[i].x=0.000000;
1795
z_map[i].x=(1.574800*0.50000)*(2.00000*i-MaxMap);
1796
x_map[i].y=(double) i;
1797
y_map[i].y=(-0.187324*0.50000)*(2.00000*i-MaxMap);
1798
z_map[i].y=(-0.468124*0.50000)*(2.00000*i-MaxMap);
1799
x_map[i].z=(double) i;
1800
y_map[i].z=(1.855600*0.50000)*(2.00000*i-MaxMap);
1899
x_map[i].x=(MagickRealType) i;
1900
y_map[i].x=0.000000f;
1901
z_map[i].x=(1.574800f*0.50000f)*(2.00000f*(MagickRealType) i-
1902
(MagickRealType) MaxMap);
1903
x_map[i].y=(MagickRealType) i;
1904
y_map[i].y=(-0.187324f*0.50000f)*(2.00000f*(MagickRealType) i-
1905
(MagickRealType) MaxMap);
1906
z_map[i].y=(-0.468124f*0.50000f)*(2.00000f*(MagickRealType) i-
1907
(MagickRealType) MaxMap);
1908
x_map[i].z=(MagickRealType) i;
1909
y_map[i].z=(1.855600f*0.50000f)*(2.00000f*(MagickRealType) i-
1910
(MagickRealType) MaxMap);
1911
z_map[i].z=0.00000f;
1834
1947
G = -0.9692580*X+1.8759900*Y+0.0415557*Z
1835
1948
B = 0.0556352*X-0.2039960*Y+1.0570700*Z
1950
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1951
#pragma omp parallel for schedule(dynamic,4)
1837
1953
for (i=0; i <= (long) MaxMap; i++)
1839
x_map[i].x=3.2407100*i;
1840
x_map[i].y=(-0.9692580)*i;
1841
x_map[i].z=0.0556352*i;
1842
y_map[i].x=(-1.5372600)*i;
1843
y_map[i].y=1.8759900*i;
1844
y_map[i].z=(-0.2039960)*i;
1845
z_map[i].x=(-0.4985710)*i;
1846
z_map[i].y=0.0415557*i;
1847
z_map[i].z=1.0570700*i;
1955
x_map[i].x=3.2407100f*(MagickRealType) i;
1956
x_map[i].y=(-0.9692580f)*(MagickRealType) i;
1957
x_map[i].z=0.0556352f*(MagickRealType) i;
1958
y_map[i].x=(-1.5372600f)*(MagickRealType) i;
1959
y_map[i].y=1.8759900f*(MagickRealType) i;
1960
y_map[i].z=(-0.2039960f)*(MagickRealType) i;
1961
z_map[i].x=(-0.4985710f)*(MagickRealType) i;
1962
z_map[i].y=0.0415557f*(MagickRealType) i;
1963
z_map[i].z=1.0570700f*(MagickRealType) i;
1860
1976
YCC is scaled by 1.3584. C1 zero is 156 and C2 is at 137.
1978
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1979
#pragma omp parallel for schedule(dynamic,4)
1862
1981
for (i=0; i <= (long) MaxMap; i++)
1864
x_map[i].x=1.3584000*i;
1865
y_map[i].x=0.0000000;
1866
z_map[i].x=1.8215000*(i-(double) ScaleQuantumToMap(
1867
ScaleCharToQuantum(137)));
1868
x_map[i].y=1.3584000*i;
1869
y_map[i].y=(-0.4302726)*(i-(double) ScaleQuantumToMap(
1870
ScaleCharToQuantum(156)));
1871
z_map[i].y=(-0.9271435)*(i-(double) ScaleQuantumToMap(
1872
ScaleCharToQuantum(137)));
1873
x_map[i].z=1.3584000*i;
1874
y_map[i].z=2.2179000*(i-(double) ScaleQuantumToMap(
1875
ScaleCharToQuantum(156)));
1876
z_map[i].z=0.0000000;
1983
x_map[i].x=1.3584000f*(MagickRealType) i;
1984
y_map[i].x=0.0000000f;
1985
z_map[i].x=1.8215000f*((MagickRealType) i-(MagickRealType)
1986
ScaleQuantumToMap(ScaleCharToQuantum(137)));
1987
x_map[i].y=1.3584000f*(MagickRealType) i;
1988
y_map[i].y=(-0.4302726f)*((MagickRealType) i-(MagickRealType)
1989
ScaleQuantumToMap(ScaleCharToQuantum(156)));
1990
z_map[i].y=(-0.9271435f)*((MagickRealType) i-(MagickRealType)
1991
ScaleQuantumToMap(ScaleCharToQuantum(137)));
1992
x_map[i].z=1.3584000f*(MagickRealType) i;
1993
y_map[i].z=2.2179000f*((MagickRealType) i-(MagickRealType)
1994
ScaleQuantumToMap(ScaleCharToQuantum(156)));
1995
z_map[i].z=0.0000000f;
1889
2008
I and Q, normally -0.5 through 0.5, must be normalized to the range 0
1890
2009
through QuantumRange.
2011
#if defined(MAGICKCORE_OPENMP_SUPPORT)
2012
#pragma omp parallel for schedule(dynamic,4)
1892
2014
for (i=0; i <= (long) MaxMap; i++)
1894
x_map[i].x=(double) i;
1895
y_map[i].x=0.47810*(2.00000*i-MaxMap);
1896
z_map[i].x=0.31070*(2.00000*i-MaxMap);
1897
x_map[i].y=(double) i;
1898
y_map[i].y=(-0.13635)*(2.00000*i-MaxMap);
1899
z_map[i].y=(-0.32340)*(2.00000*i-MaxMap);
1900
x_map[i].z=(double) i;
1901
y_map[i].z=(-0.55185)*(2.00000*i-MaxMap);
1902
z_map[i].z=0.85030*(2.00000*i-MaxMap);
2016
x_map[i].x=(MagickRealType) i;
2017
y_map[i].x=0.47810f*(2.00000f*(MagickRealType) i-(MagickRealType)
2019
z_map[i].x=0.31070f*(2.00000f*(MagickRealType) i-(MagickRealType)
2021
x_map[i].y=(MagickRealType) i;
2022
y_map[i].y=(-0.13635f)*(2.00000f*(MagickRealType) i-(MagickRealType)
2024
z_map[i].y=(-0.32340f)*(2.00000f*(MagickRealType) i-(MagickRealType)
2026
x_map[i].z=(MagickRealType) i;
2027
y_map[i].z=(-0.55185f)*(2.00000f*(MagickRealType) i-(MagickRealType)
2029
z_map[i].z=0.85030f*(2.00000f*(MagickRealType) i-(MagickRealType)
1915
2043
Pb and Pr, normally -0.5 through 0.5, must be normalized to the range 0
1916
2044
through QuantumRange.
2046
#if defined(MAGICKCORE_OPENMP_SUPPORT)
2047
#pragma omp parallel for schedule(dynamic,4)
1918
2049
for (i=0; i <= (long) MaxMap; i++)
1920
x_map[i].x=(double) i;
1921
y_map[i].x=0.000000;
1922
z_map[i].x=0.701000*(2.00000*i-MaxMap);
1923
x_map[i].y=(double) i;
1924
y_map[i].y=(-0.172068)*(2.00000*i-MaxMap);
1925
z_map[i].y=0.357068*(2.00000*i-MaxMap);
1926
x_map[i].z=(double) i;
1927
y_map[i].z=0.88600*(2.00000*i-MaxMap);
2051
x_map[i].x=(MagickRealType) i;
2052
y_map[i].x=0.000000f;
2053
z_map[i].x=0.701000f*(2.00000f*(MagickRealType) i-(MagickRealType)
2055
x_map[i].y=(MagickRealType) i;
2056
y_map[i].y=(-0.172068f)*(2.00000f*(MagickRealType) i-(MagickRealType)
2058
z_map[i].y=0.357068f*(2.00000f*(MagickRealType) i-(MagickRealType)
2060
x_map[i].z=(MagickRealType) i;
2061
y_map[i].z=0.88600f*(2.00000f*(MagickRealType) i-(MagickRealType)
2063
z_map[i].z=0.00000f;
1942
2077
U and V, normally -0.5 through 0.5, must be normalized to the range 0
1943
2078
through QuantumRange.
2080
#if defined(MAGICKCORE_OPENMP_SUPPORT)
2081
#pragma omp parallel for schedule(dynamic,4)
1945
2083
for (i=0; i <= (long) MaxMap; i++)
1947
x_map[i].x=(double) i;
1949
z_map[i].x=0.56990*(2.0000*i-MaxMap);
1950
x_map[i].y=(double) i;
1951
y_map[i].y=(-0.19690)*(2.00000*i-MaxMap);
1952
z_map[i].y=(-0.29025)*(2.00000*i-MaxMap);
1953
x_map[i].z=(double) i;
1954
y_map[i].z=1.01395*(2.00000*i-MaxMap);
2085
x_map[i].x=(MagickRealType) i;
2086
y_map[i].x=0.00000f;
2087
z_map[i].x=0.56990f*(2.0000f*(MagickRealType) i-(MagickRealType)
2089
x_map[i].y=(MagickRealType) i;
2090
y_map[i].y=(-0.19690f)*(2.00000f*(MagickRealType) i-(MagickRealType)
2092
z_map[i].y=(-0.29025f)*(2.00000f*(MagickRealType) i-(MagickRealType)
2094
x_map[i].z=(MagickRealType) i;
2095
y_map[i].z=1.01395f*(2.00000f*(MagickRealType) i-(MagickRealType)
2097
z_map[i].z=0.00000f;
1991
2131
if (status == MagickFalse)
1993
id=GetCacheViewThreadId();
1994
q=GetCacheViewPixels(image_view[id],0,y,image->columns,1);
2133
q=GetCacheViewAuthenticPixels(image_view,0,y,image->columns,1,
1995
2135
if (q == (PixelPacket *) NULL)
1997
2137
status=MagickFalse;
2001
2140
for (x=0; x < (long) image->columns; x++)
2003
pixel.red=x_map[ScaleQuantumToMap(q->red)].x+
2004
y_map[ScaleQuantumToMap(q->green)].x+
2005
z_map[ScaleQuantumToMap(q->blue)].x;
2006
pixel.green=x_map[ScaleQuantumToMap(q->red)].y+
2007
y_map[ScaleQuantumToMap(q->green)].y+
2008
z_map[ScaleQuantumToMap(q->blue)].y;
2009
pixel.blue=x_map[ScaleQuantumToMap(q->red)].z+
2010
y_map[ScaleQuantumToMap(q->green)].z+
2011
z_map[ScaleQuantumToMap(q->blue)].z;
2142
register unsigned long
2147
red=ScaleQuantumToMap(q->red);
2148
green=ScaleQuantumToMap(q->green);
2149
blue=ScaleQuantumToMap(q->blue);
2150
pixel.red=x_map[red].x+y_map[green].x+z_map[blue].x;
2151
pixel.green=x_map[red].y+y_map[green].y+z_map[blue].y;
2152
pixel.blue=x_map[red].z+y_map[green].z+z_map[blue].z;
2012
2153
switch (colorspace)
2014
2155
case YCCColorspace:
2056
if (SyncCacheViewPixels(image_view[id]) == MagickFalse)
2058
proceed=SetImageProgress(image,TransformRGBImageTag,y,image->rows);
2059
if (proceed == MagickFalse)
2197
sync=SyncCacheViewAuthenticPixels(image_view,exception);
2198
if (sync == MagickFalse)
2200
if (image->progress_monitor != (MagickProgressMonitor) NULL)
2205
#if defined(MAGICKCORE_OPENMP_SUPPORT)
2206
#pragma omp critical (MagickCore_TransformRGBImage)
2208
proceed=SetImageProgress(image,TransformRGBImageTag,progress++,
2210
if (proceed == MagickFalse)
2062
image_view=DestroyCacheViewThreadSet(image_view);
2214
image_view=DestroyCacheView(image_view);
2065
2217
case PseudoClass:
2071
2220
Convert PseudoClass image.
2073
GetMagickPixelPacket(image,&zero);
2074
image_view=AcquireCacheViewThreadSet(image);
2222
image_view=AcquireCacheView(image);
2075
2223
#if defined(MAGICKCORE_OPENMP_SUPPORT)
2076
#pragma omp parallel for schedule(static,64) shared(status)
2224
#pragma omp parallel for schedule(dynamic,4) shared(status)
2078
2226
for (i=0; i < (long) image->colors; i++)
2080
2228
MagickPixelPacket
2084
pixel.red=x_map[ScaleQuantumToMap(image->colormap[i].red)].x+
2085
y_map[ScaleQuantumToMap(image->colormap[i].green)].x+
2086
z_map[ScaleQuantumToMap(image->colormap[i].blue)].x;
2087
pixel.green=x_map[ScaleQuantumToMap(image->colormap[i].red)].y+
2088
y_map[ScaleQuantumToMap(image->colormap[i].green)].y+
2089
z_map[ScaleQuantumToMap(image->colormap[i].blue)].y;
2090
pixel.blue=x_map[ScaleQuantumToMap(image->colormap[i].red)].z+
2091
y_map[ScaleQuantumToMap(image->colormap[i].green)].z+
2092
z_map[ScaleQuantumToMap(image->colormap[i].blue)].z;
2231
register unsigned long
2236
red=ScaleQuantumToMap(image->colormap[i].red);
2237
green=ScaleQuantumToMap(image->colormap[i].green);
2238
blue=ScaleQuantumToMap(image->colormap[i].blue);
2239
pixel.red=x_map[red].x+y_map[green].x+z_map[blue].x;
2240
pixel.green=x_map[red].y+y_map[green].y+z_map[blue].y;
2241
pixel.blue=x_map[red].z+y_map[green].z+z_map[blue].z;
2093
2242
switch (colorspace)
2095
2244
case YCCColorspace: