Example #1
0
    private void OnFileSelected(String path)
    {
        RemoveChild(imageSprite);
        imageSprite = new Sprite();
        AddChild(imageSprite);

        string imgType = null;

        switch (System.IO.Path.GetExtension(path).ToLower())
        {
        case (".png"): imgType = ".png"; break;

        case (".jpeg"):
        case (".jpg"): imgType = ".jpg"; break;

        case (".webp"): imgType = ".webp"; break;
        }

        if (imgType == null)
        {
            errorDiag.PopupCenteredRatio();
            errorDiag.RectSize     = new Vector2(errorDiag.RectSize.x, errorLabel.RectSize.y);
            errorDiag.RectPosition = new Vector2(errorDiag.RectPosition.x, GetViewportRect().Size.y / 2f);
            return;
        }

        Task.Run(() => {
            try {
                var imageFile = new File();
                imageFile.Open(path, File.ModeFlags.Read);
                var buffer = imageFile.GetBuffer((int)imageFile.GetLen());
                var image  = new Image();
                if (imgType.Equals(".png"))
                {
                    image.LoadPngFromBuffer(buffer);
                }
                else if (imgType.Equals(".jpeg") || imgType.Equals(".jpg"))
                {
                    image.LoadJpgFromBuffer(buffer);
                }
                else if (imgType.Equals(".webp"))
                {
                    image.LoadWebpFromBuffer(buffer);
                }
                var im = new ImageTexture();
                im.CreateFromImage(image);
                imageSprite.Texture = im;
                var xScale          = GetViewportRect().Size.x / im.GetSize().x;
                imageSprite.Scale   = new Vector2(xScale * 0.95f, xScale * 0.95f);
                imageSprite.Translate(new Vector2(GetViewportRect().Size.x / 2f, GetViewportRect().Size.y / 2f));
            } catch {
                errorDiag.PopupCenteredRatio();
                errorDiag.RectSize     = new Vector2(errorDiag.RectSize.x, errorLabel.RectSize.y);
                errorDiag.RectPosition = new Vector2(errorDiag.RectPosition.x, GetViewportRect().Size.y / 2f);
            }
        });
    }