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); } }); }