Exemplo n.º 1
0
    private void Present(List <string> files, bool droppedFile = false)
    {
        RgbdImageProvider.MediaType        mediaType        = RgbdImageProvider.MediaType.Image;
        RgbdImageProvider.ImageArrangement imageArrangement = rgbdImageProvider != null ?
                                                              rgbdImageProvider.SourceImageArrangement : RgbdImageProvider.ImageArrangement.LR;
        string imageFilePath      = "";
        string rgbImageFilePath   = "";
        string depthImageFilePath = "";
        string videoFilePath      = "";
        string exhibitFilePath    = "";
        string config1            = "";
        string config2            = "";

        if (files.Count == 1)
        {
            if (IsImageFile(files[0]))
            {
                mediaType = RgbdImageProvider.MediaType.Image;

                imageFilePath   = files[0];
                exhibitFilePath = imageFilePath;
            }
            else if (IsVideoFile(files[0]))
            {
                mediaType = RgbdImageProvider.MediaType.Video;

                videoFilePath   = files[0];
                exhibitFilePath = videoFilePath;
            }

            if (imageArrangement == RgbdImageProvider.ImageArrangement.Separate)
            {
                imageArrangement = RgbdImageProvider.ImageArrangement.LR;
            }

            config1 = GetFileNameSuffix(files[0]);
        }
        else if (files.Count == 2)
        {
            if (IsImageFile(files[0]) && IsImageFile(files[1]))
            {
                for (int i = 0; i < 2; i++)
                {
                    if (Path.GetFileNameWithoutExtension(files[i]).IndexOf("depth", System.StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        rgbImageFilePath   = files[(i + 1) % 2];
                        depthImageFilePath = files[i];
                        exhibitFilePath    = rgbImageFilePath;

                        break;
                    }
                }

                if (exhibitFilePath.Length == 0)
                {
                    rgbImageFilePath   = files[0];
                    depthImageFilePath = files[1];
                    exhibitFilePath    = rgbImageFilePath;
                }

                mediaType        = RgbdImageProvider.MediaType.Image;
                imageArrangement = RgbdImageProvider.ImageArrangement.Separate;

                config1 = GetFileNameSuffix(rgbImageFilePath);
            }
        }

        if (exhibitFilePath.Length == 0)
        {
            Present(new List <string>()
            {
                startImageFilePath
            });
            return;
        }

        presentingExhibit = null;
        droppedExhibit    = droppedFile;

        if (exhibitFilePath != startImageFilePath)
        {
            presentingExhibit = defaults.Exhibits.Find(exhibit => exhibit[0] == exhibitFilePath);
            if (presentingExhibit == null || presentingExhibit.Count < 3)
            {
                presentingExhibit = new List <string> {
                    exhibitFilePath, "", ""
                };

                if (depthImageFilePath.Length > 0)
                {
                    presentingExhibit.Insert(1, depthImageFilePath);
                }

                defaults.Exhibits.Add(presentingExhibit);
            }
            else
            {
                config1 = presentingExhibit[presentingExhibit.Count - 2];
                config2 = presentingExhibit[presentingExhibit.Count - 1];

                if (droppedFile)
                {
                    defaults.Exhibits.Remove(presentingExhibit);
                    defaults.Exhibits.Add(presentingExhibit);
                }
            }
        }

        if (rgbdImageProvider != null)
        {
            rgbdImageProvider.InitState();
        }

        outputScreen.Darken();

        if (!ParseConfig1(config1, imageArrangement))
        {
            rgbdImageProvider.SourceImageArrangement = imageArrangement;

            // for Kandao QooCam
            if (imageArrangement == RgbdImageProvider.ImageArrangement.Separate)
            {
                if (Path.GetFileNameWithoutExtension(rgbImageFilePath).IndexOf("Output_KD3D", System.StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    ChangeSourceImageProjection(SourceImageProjection.EquirectangularHalf);

                    rgbdImageProvider.SourceImageArrangement = imageArrangement;
                    rgbdImageProvider.DepthOrientation       = RgbdImageProvider.ZAxisOrientation.FrontPositive;
                }
            }
        }

        ParseConfig2(config2);

        rgbdImageProvider.SourceMediaType    = mediaType;
        rgbdImageProvider.ImageFilePath      = imageFilePath;
        rgbdImageProvider.RgbImageFilePath   = rgbImageFilePath;
        rgbdImageProvider.DepthImageFilePath = depthImageFilePath;
        rgbdImageProvider.VideoFilePath      = videoFilePath;

        UpdateConfig1();
        UpdateConfig2();

        if (slideShow)
        {
            rgbdImageProvider.StartOneCycleOfSlideShow(SlideShowOneCyclePeriod, SlideShowRestPeriod, SlideShowFadeOutPeriod);
        }
    }
Exemplo n.º 2
0
    private bool ParseConfig1(string config, RgbdImageProvider.ImageArrangement imageArrangement)
    {
        if (config.Length < 2)
        {
            return(false);
        }

        int length = 0;

        SourceImageProjection sourceImageProjection = SourceImageProjection.Rectangular;

        if (config.IndexOf(EquirectangularHalf, System.StringComparison.OrdinalIgnoreCase) >= 0)
        {
            sourceImageProjection = SourceImageProjection.EquirectangularHalf;
            length += EquirectangularHalf.Length;
        }
        else if (config.IndexOf(EquirectangularFull, System.StringComparison.OrdinalIgnoreCase) >= 0)
        {
            sourceImageProjection = SourceImageProjection.EquirectangularFull;
            length += EquirectangularFull.Length;
        }
        else if (config.IndexOf(Rectangular, System.StringComparison.OrdinalIgnoreCase) >= 0)
        {
            sourceImageProjection = SourceImageProjection.Rectangular;
            length += Rectangular.Length;
        }
        else
        {
            sourceImageProjection = SourceImageProjection.Rectangular;
        }

        if (imageArrangement != RgbdImageProvider.ImageArrangement.Separate)
        {
            if (config.IndexOf(LR, System.StringComparison.OrdinalIgnoreCase) >= 0)
            {
                imageArrangement = RgbdImageProvider.ImageArrangement.LR;
                length          += LR.Length;
            }
            else if (config.IndexOf(RL, System.StringComparison.OrdinalIgnoreCase) >= 0)
            {
                imageArrangement = RgbdImageProvider.ImageArrangement.RL;
                length          += RL.Length;
            }
            else if (config.IndexOf(TB, System.StringComparison.OrdinalIgnoreCase) >= 0)
            {
                imageArrangement = RgbdImageProvider.ImageArrangement.TB;
                length          += TB.Length;
            }
            else if (config.IndexOf(BT, System.StringComparison.OrdinalIgnoreCase) >= 0)
            {
                imageArrangement = RgbdImageProvider.ImageArrangement.BT;
                length          += BT.Length;
            }
            else
            {
                imageArrangement = RgbdImageProvider.ImageArrangement.LR;
            }
        }

        RgbdImageProvider.ZAxisOrientation zAxisOrientation = RgbdImageProvider.ZAxisOrientation.FrontPositive;
        if (config.IndexOf(FrontNegative, System.StringComparison.OrdinalIgnoreCase) < 0)
        {
            zAxisOrientation = RgbdImageProvider.ZAxisOrientation.FrontPositive;
        }
        else
        {
            zAxisOrientation = RgbdImageProvider.ZAxisOrientation.FrontNegative;
            length          += FrontNegative.Length;
        }

        if (length != config.Length)
        {
            return(false);
        }

        ChangeSourceImageProjection(sourceImageProjection);

        rgbdImageProvider.SourceImageArrangement = imageArrangement;
        rgbdImageProvider.DepthOrientation       = zAxisOrientation;

        return(true);
    }