コード例 #1
0
        public void FromHandleTest()
        {
            // Arrange
            int type = 4;

            double[] parameters   = new double[] { 2.4, 1.0 / 1.055, 0.055 / 1.055, 1.0 / 12.92, 0.04045 };
            double   gamma        = 2.2;
            uint     nItems       = 0;
            string   languageCode = "en";
            string   countryCode  = "US";
            string   expectedText = "from-handle";

            using (var context = Context.Create(IntPtr.Zero, IntPtr.Zero))
                using (var ucr = ToneCurve.BuildParametric(context, type, parameters))
                    using (var bg = ToneCurve.BuildGamma(context, gamma))
                        using (var desc = MultiLocalizedUnicode.Create(context, nItems))
                        {
                            desc.SetASCII(languageCode, countryCode, expectedText);

                            var notExpectedUcr  = IntPtr.Zero;
                            var notExpectedBg   = IntPtr.Zero;
                            var notExpectedDesc = IntPtr.Zero;

                            var target = new UcrBg(ucr, bg, desc);

                            using (var profile = Profile.CreatePlaceholder(null))
                            {
                                profile.WriteTag(TagSignature.UcrBg, target);
                                IntPtr handle = profile.ReadTag(TagSignature.UcrBg);

                                // Act
                                var actual     = UcrBg.FromHandle(handle);
                                var actualUcr  = actual.Ucr;
                                var actualBg   = actual.Bg;
                                var actualDesc = actual.Desc;

                                // Assert
                                Assert.AreNotEqual(notExpectedUcr, actualUcr);
                                Assert.AreNotEqual(notExpectedBg, actualBg);
                                Assert.AreNotEqual(notExpectedDesc, actualDesc);
                                var desc2      = MultiLocalizedUnicode.FromHandle(actualDesc);
                                var actualText = desc2.GetASCII(languageCode, countryCode);
                                Assert.AreEqual(expectedText, actualText);
                            }
                        }
        }
コード例 #2
0
        public void FromHandleTest()
        {
            // Arrange
            string expected = "sRGB IEC61966-2.1";

            using (MemoryStream ms = Save(".Resources.sRGB.icc"))
            {
                using (var profile = Profile.Open(ms.GetBuffer()))
                    using (var mlu = MultiLocalizedUnicode.FromHandle(profile.ReadTag(TagSignature.ProfileDescription)))
                    {
                        // Act
                        string actual = mlu.GetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry);

                        // Assert
                        Assert.AreEqual(expected, actual);
                    }
            }
        }
コード例 #3
0
        public void PluginTagWithDeciderTest()
        {
            // Arrange
            const TagSignature SignaturelNET = (TagSignature)0x6C4E4554;  // 'lNET'

            // ensure delegates are not garbage collected from managed code
            var decide = new DecideType(Decide);

            PluginTag tag = new PluginTag
            {
                Base = new PluginBase
                {
                    Magic           = Cms.PluginMagicNumber,
                    ExpectedVersion = (uint)Cms.EncodedCMMVersion,    // >= 2.8
                    Type            = PluginType.Tag,
                    Next            = IntPtr.Zero
                },
                Signature  = SignaturelNET,
                Descriptor = new TagDescriptor
                {
                    ElemCount       = 1,
                    nSupportedTypes = 1,
                    SupportedTypes  = new TagTypeSignature[TagDescriptor.MAX_TYPES_IN_LCMS_PLUGIN],
                    Decider         = Marshal.GetFunctionPointerForDelegate(decide)
                }
            };

            tag.Descriptor.SupportedTypes[0] = TagTypeSignature.Text;

            string expected = "PluginTagWithDeciderTest";

            // Act
            int    rawsize = Marshal.SizeOf(tag);
            IntPtr plugin  = Marshal.AllocHGlobal(rawsize);

            Marshal.StructureToPtr(tag, plugin, false);
            try
            {
                using (var context = Context.Create(plugin, IntPtr.Zero))
                    using (var profile = Profile.CreatePlaceholder(context))
                    {
                        using (var mlu = MultiLocalizedUnicode.Create(context))
                        {
                            mlu.SetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry, expected);
                            bool written = profile.WriteTag(SignaturelNET, mlu);
                            Assert.IsTrue(written);
                        }

                        using (var mlu = profile.ReadTag <MultiLocalizedUnicode>(SignaturelNET))
                        {
                            var actual = mlu.GetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry);

                            // Assert
                            Assert.AreEqual(expected, actual);
                        }
                    }
            }
            finally
            {
                Marshal.DestroyStructure(plugin, typeof(PluginTag));
                Marshal.FreeHGlobal(plugin);
            }

            TagTypeSignature Decide(double iccVersion, IntPtr data)
            {
                TestContext.WriteLine($"iccVersion: {iccVersion}, data: 0x{data:X}");

                using (var mlu = MultiLocalizedUnicode.FromHandle(data))
                {
                    var text = mlu.GetASCII(MultiLocalizedUnicode.NoLanguage, MultiLocalizedUnicode.NoCountry);
                    TestContext.WriteLine($"text: {text}");
                }

                return(TagTypeSignature.Text);
            }
        }