示例#1
0
        private void TestGetOrientation_VariousAPP1Location(string APP1, int expectOri)
        {
            string IMAGE_WITH_STRUCT_1  = SOI + APP1 + DQT + DHT + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_2  = SOI + DQT + APP1 + DHT + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_3  = SOI + DQT + DHT + APP1 + DRI + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_4  = SOI + DQT + DHT + DRI + APP1 + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_5  = SOI + DQT + DHT + DRI + SOF + APP1 + SOS + EOI;
            string IMAGE_WITH_STRUCT_6  = SOI + DQT + DHT + SOF + APP1 + SOS + EOI;
            string IMAGE_WITH_STRUCT_7  = SOI + APP0 + APP2 + APP1 + DQT + DHT + DRI + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_8  = SOI + APP0 + APP1 + APP2 + DQT + DHT + DRI + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_9  = SOI + APP1 + APP2 + DQT + DHT + DRI + SOF + SOS + EOI;
            string IMAGE_WITH_STRUCT_10 = SOI + APP1 + SOS + EOI;

            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_1)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_2)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_3)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_4)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_5)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_6)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_7)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_8)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_9)));
            Assert.AreEqual(expectOri, JfifUtil.GetOrientation(
                                HexStringToByteArray(IMAGE_WITH_STRUCT_10)));
        }
        /// <summary>
        /// Sets the encoded image meta data.
        /// </summary>
        public async Task ParseMetaDataAsync()
        {
            ImageFormat format = ImageFormatChecker.GetImageFormat_WrapIOException(
                GetInputStream());

            Format = format;

            // Dimensions decoding is not yet supported for WebP since
            // BitmapUtil.DecodeDimensions has a bug where it will return 100x100 for
            // some WebPs even though those are not its actual dimensions.
            if (!ImageFormatHelper.IsWebpFormat(Format))
            {
                Tuple <int, int> dimensions = await BitmapUtil
                                              .DecodeDimensionsAsync(GetInputStream())
                                              .ConfigureAwait(false);

                if (dimensions != default(Tuple <int, int>))
                {
                    Width  = dimensions.Item1;
                    Height = dimensions.Item2;

                    // Load the rotation angle only if we have the dimensions
                    if (Format == ImageFormat.JPEG)
                    {
                        if (RotationAngle == UNKNOWN_ROTATION_ANGLE)
                        {
                            RotationAngle = JfifUtil.GetAutoRotateAngleFromOrientation(
                                JfifUtil.GetOrientation(GetInputStream()));
                        }
                    }
                    else
                    {
                        RotationAngle = 0;
                    }
                }
            }
        }
 /// <summary>
 /// Gets the correction angle based on the image's orientation.
 /// </summary>
 /// <param name="stream">The image stream.</param>
 /// <returns>The rotation angle.</returns>
 private int GetRotationAngle(Stream stream)
 {
     return(JfifUtil.GetAutoRotateAngleFromOrientation(
                JfifUtil.GetOrientation(stream)));
 }
示例#4
0
        private void TestGetOrientation_WithEndian(bool littleEnd)
        {
            string IFD_ENTRY_1 = MakeIfdEntry(IFD_ENTRY_TAG_1, TYPE_SHORT, 1, 255, 2, littleEnd);
            string IFD_ENTRY_2 = MakeIfdEntry(IFD_ENTRY_TAG_2, TYPE_SHORT, 1, 255, 2, littleEnd);
            string IFD_ENTRY_3 = MakeIfdEntry(IFD_ENTRY_TAG_3, TYPE_SHORT, 1, 255, 2, littleEnd);
            string TIFF_IFD_0  = MakeIfd(
                new string[]
            {
                IFD_ENTRY_1, IFD_ENTRY_2, IFD_ENTRY_3
            },
                0,
                littleEnd);
            string TIFF_IFD_1 = MakeIfd(
                new string[]
            {
                MakeOrientationEntry(1, littleEnd), IFD_ENTRY_1, IFD_ENTRY_2
            },
                0,
                littleEnd);
            string TIFF_IFD_3 = MakeIfd(
                new string[]
            {
                MakeOrientationEntry(3, littleEnd), IFD_ENTRY_1, IFD_ENTRY_2
            },
                0,
                littleEnd);
            string TIFF_IFD_6A = MakeIfd(
                new string[]
            {
                MakeOrientationEntry(6, littleEnd), IFD_ENTRY_1, IFD_ENTRY_2
            },
                0,
                littleEnd);
            string TIFF_IFD_6B = MakeIfd(
                new string[]
            {
                IFD_ENTRY_1, MakeOrientationEntry(6, littleEnd), IFD_ENTRY_2
            },
                0,
                littleEnd);
            string TIFF_IFD_6C = MakeIfd(
                new string[]
            {
                IFD_ENTRY_1, IFD_ENTRY_2, MakeOrientationEntry(6, littleEnd)
            },
                0,
                littleEnd);
            string TIFF_IFD_8 = MakeIfd(
                new string[]
            {
                MakeOrientationEntry(8, littleEnd), IFD_ENTRY_1, IFD_ENTRY_2
            },
                0,
                littleEnd);

            string APP1_0  = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_0, littleEnd));
            string APP1_1  = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_1, littleEnd));
            string APP1_3  = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_3, littleEnd));
            string APP1_6A = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_6A, littleEnd));
            string APP1_6B = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_6B, littleEnd));
            string APP1_6C = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_6C, littleEnd));
            string APP1_8  = MakeAPP1_EXIF(MakeTiff(TIFF_IFD_8, littleEnd));

            Assert.AreEqual(0, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_0))));
            Assert.AreEqual(1, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_1))));
            Assert.AreEqual(3, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_3))));
            Assert.AreEqual(6, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_6A))));
            Assert.AreEqual(6, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_6B))));
            Assert.AreEqual(6, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_6C))));
            Assert.AreEqual(8, JfifUtil.GetOrientation(
                                HexStringToByteArray(MakeTestImageWithAPP1(APP1_8))));

            TestGetOrientation_VariousAPP1Location(APP1_3, 3);
        }
示例#5
0
 public void TestGetOrientation_NoAPP1()
 {
     Assert.AreEqual(0, JfifUtil.GetOrientation(HexStringToByteArray(NO_ORI_IMAGE_1)));
     Assert.AreEqual(0, JfifUtil.GetOrientation(HexStringToByteArray(NO_ORI_IMAGE_2)));
 }