コード例 #1
0
ファイル: SKImageTest.cs プロジェクト: zbyszekpy/SkiaSharp
        public void DecodingJpegImagePreservesColorSpace()
        {
            var path = Path.Combine(PathToImages, "baboon.jpg");

            var image = SKImage.FromEncodedData(path);

            Assert.NotNull(image.ColorSpace);
        }
コード例 #2
0
        public void ShouldDetectBoundingBoxes_ReasonablyWell(string image, List <YoloBoxRectangle> expectedRectangles)
        {
            var skImage = SKImage.FromEncodedData(new MemoryStream(File.ReadAllBytes(image)));
            var result  = _yoloV3Onnx.Detect(skImage);

            var averageScore = CalculateAverageScore(result, expectedRectangles);

            Assert.GreaterOrEqual(averageScore, 0.8);
        }
コード例 #3
0
        public unsafe void DataCanBeResurrectedFromImage()
        {
            var released = false;

            var bytes = File.ReadAllBytes(Path.Combine(PathToImages, "baboon.jpg"));
            var gch   = GCHandle.Alloc(bytes, GCHandleType.Pinned);

            using (var image = DoWork(out var dataHandle))
            {
                Assert.Equal(2, dataHandle.GetReferenceCount(false));
                Assert.False(released, "Data was disposed too soon.");

                ResurrectData(image);
            }

            Assert.True(released, "Data was not disposed.");

            gch.Free();

            SKImage DoWork(out IntPtr handle)
            {
                var input = SKData.Create(gch.AddrOfPinnedObject(), bytes.Length, (_, __) => released = true);

                handle = input.Handle;

                var img = SKImage.FromEncodedData(input);

                Assert.Equal(3, input.GetReferenceCount());
                Assert.False(released, "Data was disposed too soon.");

                var result = img.Encode();

                Assert.Same(input, result);
                Assert.Equal(3, input.GetReferenceCount());
                Assert.False(released, "Data was disposed too soon.");

                result.Dispose();
                Assert.Equal(2, handle.GetReferenceCount(false));
                Assert.False(released, "Data was disposed too soon.");

                return(img);
            }

            void ResurrectData(SKImage img)
            {
                var encoded = img.EncodedData;

                Assert.NotNull(encoded);
                Assert.Equal(3, encoded.GetReferenceCount());

                var handle = encoded.Handle;

                encoded.Dispose();
                Assert.Equal(2, handle.GetReferenceCount(false));
                Assert.False(released, "Data was disposed too soon.");
            }
        }
コード例 #4
0
ファイル: Image.cs プロジェクト: wanderer0112/MissionPlanner
        public static Image FromStream(Stream ms)
        {
            var ans = new Bitmap()
            {
                nativeSkBitmap = SKBitmap.FromImage(SKImage.FromEncodedData(ms))
            };

            return(ans);
        }
コード例 #5
0
 // ReSharper disable once InconsistentNaming
 public static CachedResourceUsage <SKImage> GetAppPackageSKImage(string path)
 {
     return(Get(
                $"{nameof(ResourceCache)}-AppPackage-{nameof(SKImage)}",
                path,
                () => SkiFile.OpenAppPackageFileAsync(path),
                stream => Task.FromResult(SKImage.FromEncodedData(stream))
                ));
 }
コード例 #6
0
ファイル: BitmapHelper.cs プロジェクト: sgw-ms2soft/Mapsui
        private static readonly SKPaint Paint = new SKPaint(); // Reuse for performance. Only for opacity

        public static BitmapInfo LoadBitmap(Stream bitmapStream)
        {
            bitmapStream.Position = 0;
            var image = SKImage.FromEncodedData(SKData.CreateCopy(bitmapStream.ToBytes()));

            return(new BitmapInfo {
                Bitmap = image
            });
        }
コード例 #7
0
        /// <summary>
        /// Converts a base64 string to a SKImage, using minimal suppression via JPEG conversion
        /// <param name="base64">The base64 string being converted.</param>
        /// </summary>
        public static SKImage Base64ToSKImage(string base64)
        {
            var data   = Convert.FromBase64String(base64);
            var stream = new MemoryStream(data);
            var skData = SKData.Create(stream);

            stream.Dispose();
            return(SKImage.FromEncodedData(skData));
        }
コード例 #8
0
        public void ToRasterImageReturnsSameRaster()
        {
            using var data  = SKData.Create(Path.Combine(PathToImages, "baboon.jpg"));
            using var image = SKImage.FromEncodedData(data);

            Assert.True(image.IsLazyGenerated);
            Assert.Null(image.PeekPixels());
            Assert.Equal(image, image.ToRasterImage());
        }
コード例 #9
0
        public void SupportsNonASCIICharactersInPath()
        {
            var fileName = Path.Combine(PathToImages, "上田雅美.jpg");

            using (var image = SKImage.FromEncodedData(fileName))
            {
                Assert.NotNull(image);
            }
        }
コード例 #10
0
ファイル: BlurFace.cs プロジェクト: sugarik/PhotoCoreSite
        public BlurFace(string file, int retryAttempts, int nextRetryDelay, List <RestrictedFaceArea> hiddenRects, int jpegQuality)
        {
            dtStart = DateTime.Now;
            if (retryAttempts < 1)
            {
                retryAttempts = 1;
            }
            if (nextRetryDelay < 100)
            {
                nextRetryDelay = 100;
            }
            if (String.IsNullOrEmpty(file))
            {
                bytes = null;
            }
            else
            {
                bytes = null;

                if (File.Exists(file))
                {
                    bool       fileIsReady = false;
                    FileStream fileStream  = null;
                    try
                    {
                        do
                        {
                            try { fileStream = File.OpenRead(file); fileIsReady = true; }
                            catch (IOException exc) { Console.WriteLine("Ooops"); }
                            retryAttempts--;
                            if (!fileIsReady)
                            {
                                Thread.Sleep(nextRetryDelay);
                            }
                        }while (!fileIsReady && retryAttempts > 0);

                        if (fileStream != null)
                        {
                            fileStream.Position = 0;
                            using (SKData data = SKData.Create(fileStream))
                                using (SKImage image = SKImage.FromEncodedData(data))
                                {
                                    if (image != null)
                                    {
                                        Process(image, hiddenRects, jpegQuality);
                                    }
                                }
                        }
                    }
                    catch (Exception exc)
                    {
                    }
                    fileStream = null;
                }
            }
        }
コード例 #11
0
ファイル: ImageService.cs プロジェクト: trampster/Ropu
        public SKImage RopeSKImage()
        {
            string   resourceID = "RopuForms.rope.svg";
            Assembly assembly   = GetType().GetTypeInfo().Assembly;

            using (Stream stream = assembly.GetManifestResourceStream(resourceID))
            {
                return(SKImage.FromEncodedData(stream));
            }
        }
コード例 #12
0
        public void EncodedDataBackedImageToUIImage(byte alpha)
        {
            using var bitmap = CreateTestBitmap(alpha);
            using var data   = bitmap.Encode(SKEncodedImageFormat.Png, 100);
            using var image  = SKImage.FromEncodedData(data);

            using var uiImage = image.ToUIImage();

            ValidateTestBitmap(uiImage, alpha);
        }
コード例 #13
0
        public void OnImageAvailable(ImageReader reader)
        {
            Image      image  = reader.AcquireNextImage();
            ByteBuffer buffer = image.GetPlanes()[0].Buffer;

            byte[] bytes = new byte[buffer.Remaining()];
            buffer.Get(bytes);
            Owner.FrameReceived(bytes, SKImage.FromEncodedData(bytes));
            image.Close();
        }
コード例 #14
0
ファイル: MediaLoader.cs プロジェクト: tnsrc/FlappyBird
 public Task <SKImage> LoadTextureAsync(string path)
 {
     return(Task.Run(() =>
     {
         using (var stream = LoadStream(path))
         {
             return SKImage.FromEncodedData(stream);
         }
     }));
 }
コード例 #15
0
        public void Setup()
        {
            using var client = new HttpClient();
            var data = client.GetByteArrayAsync("https://via.placeholder.com/450").Result;

            bitmap  = SKBitmap.Decode(data);
            image   = SKImage.FromEncodedData(data);
            surface = new SKBitmap(512, 512);
            canvas  = new SKCanvas(surface);
            paint   = new SKPaint();
        }
コード例 #16
0
        private async void OnPickImage(object sender, EventArgs e)
        {
            pickedImage?.Dispose();
            pickedImage = null;

            var picked = await CrossFilePicker.Current.PickFile();

            pickedImage = SKImage.FromEncodedData(picked.GetStream());

            skiaView.InvalidateSurface();
        }
コード例 #17
0
ファイル: MapRendererTests.cs プロジェクト: charlenni/Mapsui
        private bool CompareBitmaps(Stream?bitmapStream1, Stream?bitmapStream2, int allowedColorDistance = 0, double proportionCorrect = 1)
        {
            // The bitmaps in WPF can slightly differ from test to test. No idea why. So introduced proportion correct.

            long trueCount  = 0;
            long falseCount = 0;

            if (bitmapStream1 == null && bitmapStream2 == null)
            {
                return(true);
            }

            if (bitmapStream1 == null || bitmapStream2 == null)
            {
                return(false);
            }

            bitmapStream1.Position = 0;
            bitmapStream2.Position = 0;

            using var skData1 = SKData.Create(bitmapStream1);
            var bitmap1 = SKBitmap.FromImage(SKImage.FromEncodedData(skData1));

            using var skData2 = SKData.Create(bitmapStream2);
            var bitmap2 = SKBitmap.FromImage(SKImage.FromEncodedData(skData2));

            for (var x = 0; x < bitmap1.Width; x++)
            {
                for (var y = 0; y < bitmap1.Height; y++)
                {
                    var color1 = bitmap1.GetPixel(x, y);
                    var color2 = bitmap2.GetPixel(x, y);
                    if (color1 == color2)
                    {
                        trueCount++;
                    }
                    else
                    {
                        if (CompareColors(color1, color2, allowedColorDistance))
                        {
                            trueCount++;
                        }
                        else
                        {
                            falseCount++;
                        }
                    }
                }
            }

            var proportion = (double)(trueCount - falseCount) / trueCount;

            return(proportionCorrect <= proportion);
        }
コード例 #18
0
ファイル: ImageDriver.cs プロジェクト: bencgreen/jeebs
    /// <inheritdoc/>
    public Maybe <IImageWrapper> FromFile(string path)
    {
        if (!File.Exists(path))
        {
            return(F.None <IImageWrapper>(new M.ImageFileNotFoundMsg(path)));
        }

        // Create and return image object
        using var image = SKImage.FromEncodedData(path);
        return(new ImageWrapper(image.EncodedData));
    }
コード例 #19
0
        public void TextureImageIsValidOnContext()
        {
            using var ctx = CreateGlContext();
            ctx.MakeCurrent();
            using var grContext = GRContext.CreateGl();

            using var image   = SKImage.FromEncodedData(Path.Combine(PathToImages, "baboon.jpg"));
            using var texture = image.ToTextureImage(grContext);

            Assert.True(texture.IsValid(grContext));
        }
コード例 #20
0
        public async Task EncodedDataBackedImageToBitmap(byte alpha)
        {
            using var bitmap = CreateTestBitmap(alpha);
            using var data   = bitmap.Encode(SKEncodedImageFormat.Png, 100);
            using var image  = SKImage.FromEncodedData(data);

            var source = (SKImageImageSource)image;

            using var uiImage = await handler.LoadImageAsync(source);

            ValidateTestBitmap(uiImage, alpha);
        }
コード例 #21
0
        public void RasterImageIsValidAlways()
        {
            using var image = SKImage.FromEncodedData(Path.Combine(PathToImages, "baboon.jpg"));

            Assert.True(image.IsValid(null));

            using var ctx = CreateGlContext();
            ctx.MakeCurrent();
            using var grContext = GRContext.CreateGl();

            Assert.True(image.IsValid(grContext));
        }
コード例 #22
0
        public Image LoadImage(Stream stream)
        {
            var data = Image.FromStream(stream);

            using var image = SKImage.FromEncodedData(data);
            return(new Image
            {
                Data = data,
                Width = image.Width,
                Height = image.Height
            });
        }
コード例 #23
0
ファイル: Importer.cs プロジェクト: PixiEditor/PixiEditor
        /// <summary>
        ///     Imports image from path and resizes it to given dimensions.
        /// </summary>
        /// <param name="path">Path of image.</param>
        public static Surface ImportSurface(string path)
        {
            using var image = SKImage.FromEncodedData(path);
            if (image == null)
            {
                throw new CorruptedFileException();
            }
            Surface surface = new Surface(image.Width, image.Height);

            surface.SkiaSurface.Canvas.DrawImage(image, new SKPoint(0, 0));
            return(surface);
        }
コード例 #24
0
        public void TestLazyImage()
        {
            var data = SKData.Create(Path.Combine(PathToImages, "baboon.jpg"));

            Assert.NotNull(data);

            var image = SKImage.FromEncodedData(data);

            Assert.NotNull(image);

            Assert.True(image.IsLazyGenerated);
        }
コード例 #25
0
        public void EncodedDataBackedImageToBitmap(byte alpha)
        {
            using var bitmap = CreateTestBitmap(alpha);
            using var data   = bitmap.Encode(SKEncodedImageFormat.Png, 100);
            using var image  = SKImage.FromEncodedData(data);

            using var androidBitmap = image.ToBitmap();

            ValidateTestBitmap(androidBitmap, alpha);

            androidBitmap.Recycle();
        }
コード例 #26
0
ファイル: ExcelPicture.cs プロジェクト: user20112/EPPlus
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node, FileInfo imageFile, Uri hyperlink) :
            base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name")
        {
            XmlElement picNode = node.OwnerDocument.CreateElement("xdr", "pic", ExcelPackage.schemaSheetDrawings);

            node.InsertAfter(picNode, node.SelectSingleNode("xdr:to", NameSpaceManager));
            _hyperlink       = hyperlink;
            picNode.InnerXml = PicStartXml();

            node.InsertAfter(node.OwnerDocument.CreateElement("xdr", "clientData", ExcelPackage.schemaSheetDrawings), picNode);

            //Changed to stream 2/4-13 (issue 14834). Thnx SClause
            var package = drawings.Worksheet._package.Package;

            ContentType = GetContentType(imageFile.Extension);
            var imagestream = new FileStream(imageFile.FullName, FileMode.Open, FileAccess.Read);

            _image = SKImage.FromEncodedData(imagestream);

#if (Core)
            var img = ImageCompat.GetImageAsByteArray(_image);
#else
            ImageConverter ic  = new ImageConverter();
            var            img = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif

            imagestream.Close();
            UriPic = GetNewUri(package, "/xl/media/{0}" + imageFile.Name);
            var    ii = _drawings._package.AddImage(img, UriPic, ContentType);
            string relID;
            if (!drawings._hashes.ContainsKey(ii.Hash))
            {
                Part   = ii.Part;
                RelPic = drawings.Part.CreateRelationship(UriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                relID  = RelPic.Id;
                _drawings._hashes.Add(ii.Hash, relID);
                AddNewPicture(img, relID);
            }
            else
            {
                relID = drawings._hashes[ii.Hash];
                var rel = _drawings.Part.GetRelationship(relID);
                UriPic = UriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
            }
            ImageHash = ii.Hash;
            _height   = Image.Height;
            _width    = Image.Width;
            SetPosDefaults(Image);
            //Create relationship
            node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relID;
            package.Flush();
        }
コード例 #27
0
        /// <summary>
        /// Encodes an image for storage.
        /// </summary>
        /// <param name="imageStream">The image to encode.</param>
        /// <returns>The encoded image, or null if decoding fails.</returns>
        /// <remarks>
        /// The image returned is guaranteed to have no side longer than
        /// <see cref="F:HospitalAllocation.Providers.Image.Database.DbImageProvider.MaxSideLength"/> pixels.
        /// </remarks>
        private static SKData EncodeImage(IImageStream imageStream)
        {
            // Get the image
            var imageArray = new byte[imageStream.Length];
            var stream     = new MemoryStream(imageArray);

            imageStream.CopyTo(stream);

            var data  = SKData.CreateCopy(imageArray);
            var image = SKImage.FromEncodedData(data);

            // Decode failed
            if (image == null)
            {
                return(null);
            }

            // Resize the image if required
            if (Math.Max(image.Height, image.Width) > MaxSideLength)
            {
                int   resizedHeight;
                int   resizedWidth;
                float scale;
                if (image.Height > image.Width)
                {
                    resizedHeight = MaxSideLength;
                    scale         = ((float)resizedHeight / image.Height);
                    resizedWidth  = (int)Math.Round(image.Width * scale);
                }
                else
                {
                    resizedWidth  = MaxSideLength;
                    scale         = ((float)resizedWidth / image.Width);
                    resizedHeight = (int)Math.Round(image.Height * scale);
                }

                var surface = SKSurface.Create(new SKImageInfo(resizedWidth, resizedHeight));
                var paint   = new SKPaint
                {
                    FilterQuality = SKFilterQuality.High
                };
                surface.Canvas.Scale(scale);
                surface.Canvas.DrawImage(image, 0, 0, paint);
                surface.Canvas.Flush();

                image = surface.Snapshot();
            }

            // Encode the image
            return(image.Encode(SKEncodedImageFormat.Jpeg, JpegQualityLevel));
        }
コード例 #28
0
        public MainPage()
        {
            InitializeComponent();
            _currentMatrix = SKMatrix.MakeIdentity();
            _images        = new List <MyImage>();
            _quality       = SKFilterQuality.None;
            var pinch = new PinchGestureRecognizer();

            pinch.PinchUpdated += Pinch_PinchUpdated;
            SkiaView.GestureRecognizers.Add(pinch);
            SkiaView.EnableTouchEvents = true;
            SkiaView.Touch            += SkiaView_Touch;

            var assembly = typeof(MainPage).GetTypeInfo().Assembly;

            _buffer = new List <byte[]>();
            for (int i = 0; i < 24; i++)
            {
                var names = assembly.GetManifestResourceNames();
                using (Stream s = assembly.GetManifestResourceStream("SkiaXFPlayground.img" + i + ".jpg"))
                {
                    if (s != null)
                    {
                        long length = s.Length;
                        var  b      = new byte[length];
                        s.Read(b, 0, (int)length);
                        _buffer.Add(b);
                    }
                }
                LogLabel.Text = "Loading image: " + i;
            }
            LogLabel.Text = "buffering finished";
            var x = 0;
            var y = 0;



            var im = SKImage.FromEncodedData(_buffer.ElementAt(0));

            var img = new MyImage()
            {
                Image = im
            };

            img.Destination = new SKRect(x, y, x + imagesize, y + imagesize);

            LogLabel.Text = "image added ";


            LogLabel.Text = "decoding finished " + _images.Count;
        }
コード例 #29
0
        public void ToRasterImageTrueTrueReturnsNonLazy()
        {
            using var data  = SKData.Create(Path.Combine(PathToImages, "baboon.jpg"));
            using var image = SKImage.FromEncodedData(data);

            Assert.True(image.IsLazyGenerated);
            Assert.Null(image.PeekPixels());

            using var nonLazy = image.ToRasterImage(true);
            Assert.NotEqual(image, nonLazy);
            Assert.False(nonLazy.IsLazyGenerated);
            Assert.NotNull(nonLazy.PeekPixels());
            Assert.Equal(nonLazy, nonLazy.ToRasterImage(true));
        }
コード例 #30
0
        private static void DrawWebMercatorTilesToRasterCanvas(
            SKCanvas outputCanvas,
            int width,
            int height,
            Models.Bounds boundingBox,
            IList <Models.TileDataset> sourceTiles,
            uint backgroundColor,
            int tileSize)
        {
            var zoom         = sourceTiles[0].Z;
            var tileMinX     = sourceTiles.Min(t => t.X);
            var tileMinY     = sourceTiles.Min(t => t.Y);
            var tilesCountX  = sourceTiles.Max(t => t.X) - tileMinX + 1;
            var tilesCountY  = sourceTiles.Max(t => t.Y) - tileMinY + 1;
            var canvasWidth  = tilesCountX * tileSize;
            var canvasHeight = tilesCountY * tileSize;

            var imageInfo = new SKImageInfo(
                width: canvasWidth,
                height: canvasHeight,
                colorType: SKColorType.Rgba8888,
                alphaType: SKAlphaType.Premul);

            using var surface = SKSurface.Create(imageInfo);
            using var canvas  = surface.Canvas;
            canvas.Clear(new SKColor(backgroundColor));

            // Draw all tiles
            foreach (var sourceTile in sourceTiles)
            {
                var offsetX = (sourceTile.X - tileMinX) * tileSize;
                var offsetY = (sourceTile.Y - tileMinY) * tileSize;
                using var sourceImage = SKImage.FromEncodedData(sourceTile.ImageData);
                canvas.DrawImage(sourceImage, SKRect.Create(offsetX, offsetY, tileSize, tileSize)); // Source tile scaled to dest rectangle, if needed
            }

            // Clip and scale to requested size of output image
            var geoBBox         = EntitiesConverter.MapRectangleToGeographicalBounds(boundingBox);
            var pixelOffsetX    = WebMercator.LongitudeToPixelXAtZoom(geoBBox.MinLongitude, zoom) - tileSize * tileMinX;
            var pixelOffsetY    = WebMercator.LatitudeToPixelYAtZoom(geoBBox.MaxLatitude, zoom) - tileSize * tileMinY;
            var pixelWidth      = WebMercator.LongitudeToPixelXAtZoom(geoBBox.MaxLongitude, zoom) - WebMercator.LongitudeToPixelXAtZoom(geoBBox.MinLongitude, zoom);
            var pixelHeight     = WebMercator.LatitudeToPixelYAtZoom(geoBBox.MinLatitude, zoom) - WebMercator.LatitudeToPixelYAtZoom(geoBBox.MaxLatitude, zoom);
            var sourceRectangle = SKRect.Create((float)pixelOffsetX, (float)pixelOffsetY, (float)pixelWidth, (float)pixelHeight);
            var destRectangle   = SKRect.Create(0, 0, width, height);

            using SKImage canvasImage = surface.Snapshot();
            outputCanvas.DrawImage(canvasImage, sourceRectangle, destRectangle, new SKPaint {
                FilterQuality = SKFilterQuality.High,
            });
        }