Esempio n. 1
0
        private static Stream WriteTextOnImage(Stream responseContent, string textToWrite)
        {
            //dit was om 1 of andere reden 1 van de moeilijkste onderdelen want NIKS werkt bijna met azure functions
            //Elke forumpost raad dingen aan die niet MEER werken
            //SKiaSharp werkt NU maar zodra microsoft daar achter komt zullen ze dat ook wel weer verpesten
            //maak canvasvanimage en plaats teksten
            SKBitmap sKBitmap = SKBitmap.Decode(responseContent);
            SKCanvas canvas   = new SKCanvas(sKBitmap);


            using (SKPaint paint = new SKPaint())
            {
                paint.Color     = SKColors.Blue;
                paint.TextAlign = SKTextAlign.Center;
                paint.TextSize  = 16;

                canvas.DrawText(textToWrite, 250, 50, paint);
            }

            //vertaal die canvasimage/bitmap weer naar een stream
            SKBitmap bitmap  = sKBitmap;
            SKImage  image   = SKImage.FromBitmap(bitmap);
            SKData   encoded = image.Encode();
            Stream   stream  = encoded.AsStream();

            return(stream);
        }
Esempio n. 2
0
        public Stream GetBitmap(double nHour, double nMinute, double nSecond, int width = 512, int height = 512, bool bDrawBackImage = false)
        {
            if (bitmap == null || bitmap.Width != width || bitmap.Height != height)
            {
                bitmap?.Dispose();
                bitmap = new SKBitmap(width, height);
            }

            SKCanvas canvas = new SKCanvas(bitmap);

            DrawCanvas(canvas, nHour, nMinute, nSecond, width, height, bDrawBackImage);

            // create an image COPY
            //SKImage image = SKImage.FromBitmap(bitmap);
            // OR
            // create an image WRAPPER
            SKImage image = SKImage.FromPixels(bitmap.PeekPixels());

            // encode the image (defaults to PNG)
            SKData encoded = image.Encode();

            // get a stream over the encoded data
            Stream stream = encoded.AsStream();

            return(stream);
        }
        private static async Task CreateBlob(string name, SKData data)
        {
            CloudStorageAccount storageAccount;
            CloudBlobClient     client;
            CloudBlobContainer  container;
            CloudBlockBlob      blob;

            string connectionString = System.Environment.GetEnvironmentVariable("AzureStorageConnectionString", EnvironmentVariableTarget.Process);

            storageAccount = CloudStorageAccount.Parse(connectionString);

            client = storageAccount.CreateCloudBlobClient();

            container = client.GetContainerReference("mandelbrot");

            await container.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Blob, null, null);

            blob = container.GetBlockBlobReference(name);
            blob.Properties.ContentType = "image/png"; // could be application/octet-stream

            using (var stream = data.AsStream())
            {
                await blob.UploadFromStreamAsync(stream);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Updates the diagram view on the screen.
        /// <param name="clear">Clear the screen before redrawing?</param>
        /// </summary>
        public void UpdateScreen(bool clear)
        {
            try
            {
                SKSurface surf = CurrentDiagram.UpdateView(clear);
                using (SKImage screen = surf.Snapshot())
                    using (SKData data = screen.Encode(SKEncodedImageFormat.Png, 100))
                        using (Stream stream = data.AsStream())
                        {
                            // The above using statement chain converts the SKSurface into a stream,
                            // which can be used to make a Windows Forms-compatible Bitmap.
                            Bitmap img = new Bitmap(stream, false);
                            if (DiagramView.Image != null)
                            {
                                DiagramView.Image.Dispose();
                            }
                            DiagramView.Image = img;
                        }

                if (clear && !MessageBoxText.Contains(" Diagram view cleared and redrawn."))
                {
                    MessageBoxText += " Diagram view cleared and redrawn.";
                }
            }
            catch (Exception e)
            {
                Log.LogMessageError("Uncaught exception.");
                ErrorLogger.ShowErrorMessageBox(e);
            }
        }
Esempio n. 5
0
        public static Stream GenerateBitmapStream(SKImage skImage)
        {
            SKData skData = skImage.Encode(SKEncodedImageFormat.Png, 100);
            Stream stream = skData.AsStream(true);

            return(stream);
        }
Esempio n. 6
0
        public static (QRCodeCreateResult result, Stream?stream, Exception?exception) Create(byte[] bytes, QrCode.Ecc?level = null)
        {
            level ??= QrCode.Ecc.Low;
            try
            {
                var qrCode     = QrCode.EncodeBinary(bytes, level); // Make the QR code symbol
                var foreground = IApplication.Instance.ActualTheme switch
                {
                    AppTheme.Dark => SKColors.White,
                    _ => SKColors.Black,
                };
                int scale = 10, border = 4;
                using SKBitmap bitmap = qrCode.ToBitmap(scale, border, foreground);
                SKData data = bitmap.Encode(SKEncodedImageFormat.Png, 90);

                return(QRCodeCreateResult.Success, data.AsStream(true), null);
            }
            catch (DataTooLongException e)
            {
                return(QRCodeCreateResult.DataTooLong, null, e);
            }
            catch (Exception e)
            {
                return(QRCodeCreateResult.Exception, null, e);
            }
        }
Esempio n. 7
0
        /// <summary>
        ///     Copies the selection to clipboard in PNG, Bitmap and DIB formats.
        /// </summary>
        /// <param name="layers">Layers where selection is.</param>
        public static void CopyToClipboard(Layer[] layers, Layer selLayer, LayerStructure structure, int originalImageWidth, int originalImageHeight, SerializableDocument document = null)
        {
            if (!ClipboardHelper.TryClear())
            {
                return;
            }
            if (layers.Length == 0)
            {
                return;
            }

            using Surface surface = CreateMaskedCombinedSurface(layers, structure, selLayer);
            DataObject data = new DataObject();


            //BitmapSource croppedBmp = BitmapSelectionToBmpSource(finalBitmap, selLayer, out int offsetX, out int offsetY, out int width, out int height);

            //Remove for now
            //data.SetData(typeof(CropData), new CropData(width, height, offsetX, offsetY).ToStream());

            using (SKData pngData = surface.SkiaSurface.Snapshot().Encode())
            {
                // Stream should not be disposed
                MemoryStream pngStream = new MemoryStream();
                pngData.AsStream().CopyTo(pngStream);

                data.SetData("PNG", pngStream, false); // PNG, supports transparency

                pngStream.Position = 0;
                Directory.CreateDirectory(Path.GetDirectoryName(TempCopyFilePath));
                using FileStream fileStream = new FileStream(TempCopyFilePath, FileMode.Create, FileAccess.Write);
                pngStream.CopyTo(fileStream);
                data.SetFileDropList(new StringCollection()
                {
                    TempCopyFilePath
                });
            }

            WriteableBitmap finalBitmap = surface.ToWriteableBitmap();

            data.SetData(DataFormats.Bitmap, finalBitmap, true); // Bitmap, no transparency
            data.SetImage(finalBitmap);                          // DIB format, no transparency

            // Remove pixi copying for now

            /*
             * if (document != null)
             * {
             *  MemoryStream memoryStream = new();
             *  PixiParser.Serialize(document, memoryStream);
             *  data.SetData("PIXI", memoryStream); // PIXI, supports transparency, layers, groups and swatches
             *  ClipboardHelper.TrySetDataObject(data, true);
             * }
             */

            ClipboardHelper.TrySetDataObject(data, true);
        }
Esempio n. 8
0
        public static ImageSource GenerateBitmapPopulateImageSource(SKImage skImage)
        {
            ImageSource ImgSrc = ImageSource.FromStream(() => {
                SKData skData = skImage.Encode(SKEncodedImageFormat.Png, 100);
                Stream stream = skData.AsStream(true);
                return(stream);
            });

            return(ImgSrc);
        }
Esempio n. 9
0
        internal ImageSource GetImageResource()
        {
            SKImage image = SKImage.FromBitmap(bitmap);
            // encode the image (defaults to PNG)
            SKData encoded = image.Encode();

            System.IO.Stream stream = encoded.AsStream();
            var source = Xamarin.Forms.ImageSource.FromStream(() => stream);

            return(source);
        }
        public static Image GetImageFromBitmap(SKBitmap bitmap)
        {
            Image img = new Image();

            SKImage image   = SKImage.FromPixels(bitmap.PeekPixels());
            SKData  encoded = image.Encode();
            Stream  stream  = encoded.AsStream();

            img.Source = ImageSource.FromStream(() => stream);

            return(img);
        }
Esempio n. 11
0
        public MemoryStream SourceStream()
        {
            SKImage image        = SKImage.FromBitmap(SourceImage);
            SKData  encoded      = image.Encode();
            var     memoryStream = new MemoryStream();

            encoded.AsStream().CopyTo(memoryStream);
            memoryStream.Seek(0, SeekOrigin.Begin);

#if LOG_DEBUG
            SDV_Logger.LogInfo("SourceStream", $"Stream length: {memoryStream.Length}");
#endif
            return(memoryStream);
        }
        public Stream Assemble()
        {
            // # Set the number of frames per second to display
            // frameRate( frame_rate )

            //SKCanvas canvas = new SKCanvas()
            SKPath  path    = new SKPath();
            Stream  stream  = null;
            SKImage skImage = null;

            try {
                using (var skSurface = SKSurface.Create(new SKImageInfo(w, h))) {
                    var canvas = skSurface.Canvas;
                    // # Sets color space to Hue Saturation Brightness with max values of HSB respectively
                    // colorMode(HSB, 360, 100, 100, 100)

                    //background(0, 0, 100)
                    canvas.Clear(SKColors.White);
                    // rectMode(CORNER)

                    // draw ...
                    draw(canvas);

                    canvas.Flush();

                    //skImage = skSurface.Snapshot();
                    SKPaint paintConvert = SkiaSharpUtility.CreateDefaultPaint();
                    //skImage = SkiaSharpUtility.ScaleSurfaceToImage( skSurface, ImageCanvasSize, size, paintConvert );
                    skImage = skSurface.Snapshot();
                }
                // encode
                SKData skData = SkiaSharpUtility.EncodeImageToSKData(skImage, "png");

                stream = skData.AsStream();
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            finally {
                if (skImage != null)
                {
                    skImage.Dispose();
                }
                paint.Dispose();
            }
            return(stream);
        }
Esempio n. 13
0
        private async Task AnalyzePhotoMood(byte[] imageBytes)
        {
            var service = new CognitiveEmotionService();

            latestResult = await service.GetImageEmotions(imageBytes);

            var bitmap = SKBitmap.Decode(latestPhotoPath);
            var canvas = new SKCanvas(bitmap);

            var sbResult = new StringBuilder();

            for (var index = 0; index < latestResult.Length; index++)
            {
                var result = latestResult[index];
                var paint  = new SKPaint
                {
                    Style       = SKPaintStyle.Stroke,
                    Color       = SKColors.Red,
                    StrokeWidth = 5
                };
                var rect = result.FaceRectangle;

                canvas.DrawRect(SKRect.Create(rect.Left, rect.Top, rect.Width, rect.Height), paint);



                sbResult.Append(
                    $@"Face {index}\r\n
Happiness: {result.Scores.Happiness:P}
Neutral: {result.Scores.Neutral:P}
Contempt: {result.Scores.Contempt:P}
Fear: {result.Scores.Fear:P}
Disgust: {result.Scores.Disgust:P}
Sadness: {result.Scores.Sadness:P}
Anger: {result.Scores.Anger:P}
");
            }

            this.Result = sbResult.ToString();

            SKData d = SKImage.FromBitmap(bitmap).Encode(SKEncodedImageFormat.Png, 100);

            this.ImageSource = Xamarin.Forms.ImageSource.FromStream(() =>
            {
                return(d.AsStream(true));
            });
        }
Esempio n. 14
0
        public Stream ViewBitmapAsStream(SKBitmap ImageBitmap)
        {
            // get the bitmap we want to convert to a stream
            SKBitmap bitmap = ImageBitmap;

            // create an image COPY
            SKImage image = SKImage.FromBitmap(bitmap);
            // OR
            // create an image WRAPPER
            //SKImage image = SKImage.FromPixels(bitmap.PeekPixels());

            // encode the image (defaults to PNG)
            SKData encoded = image.Encode();

            // get a stream over the encoded data
            Stream ImageStream = encoded.AsStream();

            return(ImageStream);
        }
Esempio n. 15
0
        public ImageSource GetImageSource()
        {
            SKImage image = SKImage.FromBitmap(bitmap);

            // encode the image (defaults to PNG)
            SKData encoded = image.Encode();

            System.IO.Stream stream = encoded.AsStream();
            var source = ImageSource.FromStream(() => stream);

            return(source);

            // if (snapshot == null) return null;
            //var image = SkiaSharp.SKImage.FromBitmap(bitmap);

            /* var encoded = snapshot.Encode();
             * var stream = encoded.AsStream();
             * var source = ImageSource.FromStream(() => stream);
             * return source;*/
        }
Esempio n. 16
0
        public void DataDisposedReturnsInvalidStream()
        {
            // create data
            var data = new SKData(OddData);

            // get the stream
            var stream = data.AsStream();

            // nuke the data
            data.Dispose();
            Assert.AreEqual(IntPtr.Zero, data.Handle);

            // read the stream
            var buffer = new byte[OddData.Length];

            stream.Read(buffer, 0, buffer.Length);

            // since the data was nuked, they will differ
            CollectionAssert.AreNotEqual(OddData, buffer);
        }
Esempio n. 17
0
        private async Task Analyse()
        {
            // encode the image (defaults to PNG)
            SKData encoded = _image.Encode();

            Microsoft.ProjectOxford.Vision.Contract.AnalysisResult result;
            // get a stream over the encoded data
            using (var stream = encoded.AsStream())
            {
                result = await _computerVisionService.GetAnalysisResult(stream);
            }

            if (result != null)
            {
                var json = JsonConvert.SerializeObject(result);
                await DisplayAlert("Result", json, "OK");
            }
            else
            {
                await DisplayAlert("Result", "An error occured, make sure the API key is valid for the BaseUrl.", "OK");
            }
        }
Esempio n. 18
0
        public Stream Assemble(int size = 256)
        {
            //SKCanvas canvas = new SKCanvas()
            SKPath  path    = new SKPath();
            Stream  stream  = null;
            SKImage skImage = null;

            try {
                using (var skSurface = SKSurface.Create(new SKImageInfo(w, h))) {
                    var canvas = skSurface.Canvas;
                    canvas.Clear(bc); //set background color
                    // draw ...
                    draw(canvas);

                    canvas.Flush();

                    //skImage = skSurface.Snapshot();
                    SKPaint paintConvert = SkiaSharpUtility.CreateDefaultPaint();
                    skImage = SkiaSharpUtility.CropSurfaceToImage(skSurface, ImageCanvasSize, size, paintConvert);
                }
                // encode
                SKData skData = SkiaSharpUtility.EncodeImageToSKData(skImage, "png");

                stream = skData.AsStream();
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            finally {
                if (skImage != null)
                {
                    skImage.Dispose();
                }
                paint.Dispose();
            }
            return(stream);
        }
Esempio n. 19
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="imagedata"></param>
        /// <param name="imageCompressionFactor">Percentage the Part wich schould be used.</param>
        /// <returns></returns>
        public static byte[] CompressImage(byte[] imagedata, float imageCompressionFactor)
        {
            using (SKBitmap bmp = SKBitmap.Decode(imagedata))
            {
                int size = (int)(bmp.Width * imageCompressionFactor);

                int width, height;
                if (bmp.Width > bmp.Height)
                {
                    width  = size;
                    height = bmp.Height * size / bmp.Width;
                }
                else
                {
                    width  = bmp.Width * size / bmp.Height;
                    height = size;
                }
                SKBitmap scaled    = bmp.Resize(new SKImageInfo(width, height), SKBitmapResizeMethod.Lanczos3);
                SKData   imageData = SKImage.FromBitmap(scaled).Encode(SKEncodedImageFormat.Jpeg, 100);

                if (APIStatics.ISDebugging)
                {
                    Guid imagID = Guid.NewGuid();
                    Directory.CreateDirectory("/images");
                    using (var filestream = File.OpenWrite($"/images/image{imagID}.png"))
                    {
                        imageData.SaveTo(filestream);
                    }
                }

                using (BinaryReader br = new BinaryReader(imageData.AsStream()))
                {
                    return(br.ReadBytes((int)imageData.Size));
                }
            }
        }
Esempio n. 20
0
        public Stream Assemble(string roboset, string color, string format, string bgset, int size = 256)
        {
            if (size < 256)
            {
                _ = 256;
            }
            else if (size > ImageCanvasSize)
            {
                size = ImageCanvasSize;
            }
            // roboset
            if (roboset == "any")
            {
                // roboset = self.sets[self.hasharray[1] % len(self.sets) ]
                int index = (int)(this.hashes[1] % this.sets.Count);
                _ = this.sets[index];
            }
            else if (!this.sets.Contains(roboset))
            {
                _ = this.sets[0];
            }

            /*
             # Only set1 is setup to be color-seletable. The others don't have enough pieces in various colors.
             # This could/should probably be expanded at some point..
             # Right now, this feature is almost never used. ( It was < 44 requests this year, out of 78M reqs )
             */
            if (roboset == "set1")
            {
                if (!string.IsNullOrEmpty(color) && this.colorsInSet1.Contains(color))
                {
                    roboset = "set1\\" + color;
                }
                else
                {
                    //randomcolor = self.colors[self.hasharray[0] % len(self.colors) ]
                    int index = (int)(this.hashes[0] % this.colorsInSet1.Count);
                    roboset = "set1\\" + this.colorsInSet1[index];
                }
            } // roboset == "set1"

            // If they specified a background, ensure it's legal, then give it to them.
            if (!bgSets.Contains(bgset) || bgset == "any")
            {
                //bgset = self.bgsets[self.hasharray[2] % len( self.bgsets )]
                int index = (int)(this.hashes[2] % this.bgSets.Count);
                bgset = this.bgSets[index];
            }

            // If we set a format based on extension earlier, use that. Otherwise, PNG.
            if (string.IsNullOrEmpty(format))
            {
                format = this.format;
            }

            /*
             # Each directory in our set represents one piece of the Robot, such as the eyes, nose, mouth, etc.
             #
             # Each directory is named with two numbers - The number before the # is the sort order.
             # This ensures that they always go in the same order when choosing pieces, regardless of OS.
             #
             # The second number is the order in which to apply the pieces.
             # For instance, the head has to go down BEFORE the eyes, or the eyes would be hidden.
             #
             # First, we'll get a list of parts of our robot.
             */
            var roboparts = getImagesPaths(this.resourceDir + "sets\\" + roboset);

            // Now that we've sorted them by the first number, we need to sort each sub-category by the second.
            roboparts = roboparts
                        .OrderBy(s => s.Split('#')[1])
                        .ToList();

            Stream  stream  = null;
            SKImage skImage = null;
            SKPaint paint   = Tools.SkiaSharpUtility.CreateDefaultPaint();

            try {
                using (var skSurface = SKSurface.Create(new SKImageInfo(ImageCanvasSize, ImageCanvasSize))) {
                    var canvas = skSurface.Canvas;
                    canvas.Clear(SKColors.Transparent); //set background color
                    // draw background
                    if (!string.IsNullOrEmpty(bgset))
                    {
                        string        bgDirPath         = this.resourceDir + "backgrounds\\" + bgset;
                        List <string> legalBackgrounds  = new List <string>();
                        var           backgrounds       = System.IO.Directory.GetFiles(bgDirPath);
                        var           sortedBackgrounds = backgrounds.OrderBy(s => s);
                        foreach (string bg in sortedBackgrounds)
                        {
                            string bgName = bg.Substring(bgDirPath.Length);
                            if (!bgName.StartsWith(".")) // skip files like .git, .xxx
                            {
                                legalBackgrounds.Add(bg);
                            }
                        }
                        // Use some of our hash bits to choose which file
                        int    index      = (int)(this.hashes[3] % legalBackgrounds.Count);
                        string bgPartPath = legalBackgrounds[index];
                        drawToCanvas(canvas, bgPartPath, paint);
                    }
                    foreach (var partImage in roboparts)
                    {
                        drawToCanvas(canvas, partImage, paint);
                    }
                    canvas.Flush();

                    skImage = Tools.SkiaSharpUtility.ScaleSurfaceToImage(skSurface, ImageCanvasSize, size, paint);
                }
                // encode
                SKData skData = Tools.SkiaSharpUtility.EncodeImageToSKData(skImage, format);

                stream = skData.AsStream();
            }
            catch (Exception ex) {
                Console.WriteLine(ex.Message);
            }
            finally {
                if (skImage != null)
                {
                    skImage.Dispose();
                }
                paint.Dispose();
            }
            return(stream);
        }
Esempio n. 21
0
        private void SecondButtonOnClick(object sender, EventArgs e)
        {
            //GET X/Y LOCATION FROM GestureVIEW

            DisplayMetrics dm = this.Resources.DisplayMetrics;

            //GET DATA FROM THE GestureRecognizerView
            XLocation = _v.StickerXLocation * 1.245F; /// * dm.Density;
            YLocation = _v.StickerYLocation * 1.245F; /// * dm.Density;

            //StickerXLength = _v.StickerXLength;
            //StickerYHeight = _v.StickerYHeight;

            StickerXLengthFloat = _v.StickerXLength * 1.245F; // *1.20F;
            StickerYLengthFloat = _v.StickerYHeight * 1.245F; // *1.20F;

            RunOnUiThread
                (() =>
            {
                var xlocationText = string.Format("{0:N3}", XLocation);
                var ylocationText = string.Format("{0:N3}", YLocation);
                mytextView.Text   = String.Format("Location: {0}, {1}", xlocationText, ylocationText);//"Location";
            });

            int width  = 0;
            int height = 0;

            //GET THE DRAWABLE IN FILE
            System.IO.Stream inputStream   = this.Resources.OpenRawResource(Resource.Drawable.ic_launcher);
            SKBitmap         stickerBitmap = SKBitmap.Decode(inputStream);

            //width = stickerBitmap.Width;
            //height = stickerBitmap.Height;

            //IF YOU RAN INTO AN ERROR HERE - YOU LIKELY DIDN'T CHOSE AN IMAGE
            //PUT VARIOUS CHECKS MAKE SURE AN IMAGE WAS SELECTED

            //CREATING BITMAP FROM THE IMAGE IN THE PHOTO LIBRARY (THIS MAKES A LARGE FULL RESOLUTION IMAGE)
            //METHOD 1
            //ContentResolver cr = this.ContentResolver;
            //var theInputStream = cr.OpenInputStream(_uri);
            //SKBitmap pickedImageBitmap = SKBitmap.Decode(theInputStream);
            //width = pickedImageBitmap.Width;
            //height = pickedImageBitmap.Height;

            //METHOD 2
            //CREATE A BITMAP FROM AN IMAGE STORED IN APP PRIVATE STORAGE (THIS NORMALIZES IMAGE RESOLUTION)

            //SKBitmap privateStorageImageBitmap = SKBitmap.Decode("rPIFName");
            //This method not valid due to issue SKIA's file searching library (not a SkiaSharp issue but an underlying issue)

            SKBitmap privateStorageImageBitmap;

            using (var fos = OpenFileInput("rPIFName"))
            {
                privateStorageImageBitmap = SKBitmap.Decode(fos);
            }


            width  = privateStorageImageBitmap.Width;
            height = privateStorageImageBitmap.Height;


            SKImage finalImage = null;

            using (var tempSurface = SKSurface.Create(new SKImageInfo(width, height)))
            {
                //get the drawing canvas of the surface
                var canvas = tempSurface.Canvas;

                //set background color
                canvas.Clear(SKColors.Transparent);

                //go through each image and draw it on the final image
                int offset    = 0;
                int offsetTop = 0;

                //FIRST PUT THE PICKED BACKGROUND IMAGE
                //METHOD 1 - without resizing bitmap
                //canvas.DrawBitmap(pickedImageBitmap, SKRect.Create(offset, offsetTop, pickedImageBitmap.Width, pickedImageBitmap.Height)); // 810, 810)); //pickedImageBitmap.Width, pickedImageBitmap.Height));

                //METHOD 2 - with resized bitmap
                canvas.DrawBitmap(privateStorageImageBitmap, SKRect.Create(offset, offsetTop, privateStorageImageBitmap.Width, privateStorageImageBitmap.Height)); // 810, 810)); //pickedImageBitmap.Width, pickedImageBitmap.Height));

                //810 in low res photos

                //SECOND PUT IN THE "STICKER"
                //canvas.DrawBitmap(stickerBitmap, SKRect.Create(XLocation, YLocation, stickerBitmap.Width, stickerBitmap.Height));  //5*StickerXLength, 5*StickerYHeight));
                canvas.DrawBitmap(stickerBitmap, SKRect.Create(XLocation, YLocation, StickerXLengthFloat, StickerYLengthFloat));  //5*StickerXLength, 5*StickerYHeight));

                finalImage = tempSurface.Snapshot();

                SKData data   = finalImage.Encode(SKEncodedImageFormat.Png, 100); // don't dispose
                Stream stream = data?.AsStream(true);                             // AsStream(true);

                String fileName = "myImage";

                using (MemoryStream memStream = new MemoryStream())
                {
                    stream.CopyTo(memStream);
                    using (var fos = OpenFileOutput(fileName, FileCreationMode.Private))  //("myImage", FileCreationMode.Private);
                    {
                        fos.Write(memStream.ToArray(), 0, memStream.ToArray().Length);
                        fos.Flush();
                        fos.Close();
                    }
                }

                //SET UP THE FINAL IMAGE TO BE DISPLAYED
                var activity2 = new Intent(this, typeof(Activity2));
                activity2.PutExtra("MyData", "Data from Activity1");
                StartActivity(activity2);
            }
        }
Esempio n. 22
0
        private void RenderPicker(int w = 0, int h = 0)
        {
            if (_container == null)
            {
                return;
            }

            double width  = w > 0 ? w : this.Width;
            double height = h > 0 ? h : this.Height;

            if (width == -1 || height == -1)
            {
                return;
            }

            double colorVal = this.ColorValue;
            double offset   = this.HueOffset;
            bool   invert   = this.InvertSaturation;
            float  esize    = this.ElementSize;

            ColorPickerMode mode = this.Mode;

            _ = Task.Run(() =>
            {
                ColorPickerRenderer cw;

                if (w <= 0)
                {
                    if (double.IsNaN(width))
                    {
                        return;
                    }
                    w = (int)width;
                }
                if (h <= 0)
                {
                    if (double.IsNaN(height))
                    {
                        return;
                    }
                    h = (int)height;
                }

                if (w < 32 || h < 32)
                {
                    return;
                }

                if (mode == ColorPickerMode.Wheel || mode == ColorPickerMode.HexagonWheel)
                {
                    int rad;

                    if (h < w)
                    {
                        rad = h / 2;
                        w   = h;
                    }
                    else
                    {
                        rad = w / 2;
                        h   = w;
                    }

                    cw = new ColorPickerRenderer(rad, colorVal, offset, invert, true);
                }
                else
                {
                    cw = new ColorPickerRenderer(w, h, colorVal, offset, invert, mode == ColorPickerMode.LinearVertical, true);
                }

                DispatcherQueue.TryEnqueue(async() =>
                {
                    SKImage img;
                    SKBitmap bmp = new SKBitmap((int)cw.Bounds.Width, (int)cw.Bounds.Height, SKColorType.Bgra8888, SKAlphaType.Premul);

                    var ptr = bmp.GetPixels();

                    unsafe
                    {
                        var gch = GCHandle.Alloc(cw.ImageBytes, GCHandleType.Pinned);

                        Buffer.MemoryCopy((void *)gch.AddrOfPinnedObject(), (void *)ptr, cw.ImageBytes.Length, cw.ImageBytes.Length);
                        gch.Free();
                    }

                    bmp.SetImmutable();
                    img = SKImage.FromBitmap(bmp);

                    SKData encoded = img.Encode();
                    Stream stream  = encoded.AsStream();

                    //var ret = ImageSource.FromStream(() => stream);

                    cpRender = cw;


                    Compositor _compositor = _container.Compositor;
                    SpriteVisual _imageVisual;
                    CompositionSurfaceBrush _imageBrush;

                    _imageBrush = _compositor.CreateSurfaceBrush();

                    // The loadedSurface has a size of 0x0 till the image has been been downloaded, decoded and loaded to the surface. We can assign the surface to the CompositionSurfaceBrush and it will show up once the image is loaded to the surface.
                    LoadedImageSurface _loadedSurface = LoadedImageSurface.StartLoadFromStream(stream.AsRandomAccessStream());

                    _imageBrush.Surface = _loadedSurface;

                    _imageVisual       = _compositor.CreateSpriteVisual();
                    _imageVisual.Brush = _imageBrush;
                    _imageVisual.Size  = new Vector2(cw.Bounds.Width, cw.Bounds.Height);
                    //_imageVisual.Offset = new Vector3((float)Padding.Left, (float)Padding.Top, 0);

                    _container.Children.RemoveAll();
                    _container.Children.InsertAtBottom(_imageVisual);

                    currentShape  = null;
                    currentSprite = null;
                    currentGeo    = null;
                });
            });
        }
        private async void IdentificationAsync()
        {
            faceResults.Clear();
            canvasView.InvalidateSurface();

            SKImage image   = SKImage.FromBitmap(libraryBitmap);
            SKData  encoded = image.Encode();

            Face[] faces = await faceServiceClient.DetectAsync(encoded.AsStream(), true, true, new FaceAttributeType[] { FaceAttributeType.Age, FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Emotion });

            Guid[] faceIds = faces.Select(face => face.FaceId).ToArray();

            if (faces.Count() > 0)
            {
                string personGroupId = "1421";
                var    personGroup   = await faceServiceClient.GetPersonGroupAsync(personGroupId);

                var results = await faceServiceClient.IdentifyAsync(personGroupId, faceIds);

                using (SKCanvas canvas = new SKCanvas(libraryBitmap))
                {
                    using (SKPaint paint = new SKPaint())
                    {
                        paint.Color       = new SKColor(255, 0, 0);
                        paint.StrokeWidth = 5f;

                        foreach (var face in faces)
                        {
                            // 擷取臉部圖片
                            SKBitmap faceBitmap = new SKBitmap(face.FaceRectangle.Width, face.FaceRectangle.Height);
                            SKRect   dest       = new SKRect(0, 0, face.FaceRectangle.Width, face.FaceRectangle.Height);
                            SKRect   source     = new SKRect(face.FaceRectangle.Left, face.FaceRectangle.Top, face.FaceRectangle.Left + face.FaceRectangle.Width, face.FaceRectangle.Top + face.FaceRectangle.Height);

                            using (SKCanvas faceCanvas = new SKCanvas(faceBitmap))
                            {
                                faceCanvas.DrawBitmap(libraryBitmap, source, dest);
                            }

                            SKImage faceImage = SKImage.FromBitmap(faceBitmap);

                            List <(string, float)> emotions = new List <(string, float)>
                            {
                                ("生氣", face.FaceAttributes.Emotion.Anger),
                                ("鄙視", face.FaceAttributes.Emotion.Contempt),
                                ("厭惡", face.FaceAttributes.Emotion.Disgust),
                                ("恐懼", face.FaceAttributes.Emotion.Fear),
                                ("幸福", face.FaceAttributes.Emotion.Happiness),
                                ("中性", face.FaceAttributes.Emotion.Neutral),
                                ("悲傷", face.FaceAttributes.Emotion.Sadness),
                                ("驚喜", face.FaceAttributes.Emotion.Surprise)
                            };

                            string result = string.Empty;

                            if (results.First(c => c.FaceId == face.FaceId).Candidates.Count() == 0)
                            {
                                result = string.Format("名稱: {0}\n年紀: {1}\n眼鏡: {2}\n表情: {3}", "未知", face.FaceAttributes.Age, face.FaceAttributes.Glasses, emotions.OrderByDescending(c => c.Item2).Select(c => c.Item1).First());
                            }
                            else
                            {
                                var person = await faceServiceClient.GetPersonAsync(personGroupId, results.First(c => c.FaceId == face.FaceId).Candidates[0].PersonId);

                                result = string.Format("名稱: {0}\n年紀: {1}\n眼鏡: {2}\n表情: {3}", person.Name, face.FaceAttributes.Age, face.FaceAttributes.Glasses, emotions.OrderByDescending(c => c.Item2).Select(c => c.Item1).First());
                            }


                            faceResults.Add(new FaceResult {
                                Result = result, Face = ImageSource.FromStream(() => faceImage.Encode().AsStream())
                            });


                            // 把臉部框起來
                            canvas.DrawLine(new SKPoint(face.FaceRectangle.Left, face.FaceRectangle.Top), new SKPoint(face.FaceRectangle.Left + face.FaceRectangle.Width, face.FaceRectangle.Top), paint);
                            canvas.DrawLine(new SKPoint(face.FaceRectangle.Left, face.FaceRectangle.Top), new SKPoint(face.FaceRectangle.Left, face.FaceRectangle.Top + face.FaceRectangle.Height), paint);
                            canvas.DrawLine(new SKPoint(face.FaceRectangle.Left + face.FaceRectangle.Width, face.FaceRectangle.Top), new SKPoint(face.FaceRectangle.Left + face.FaceRectangle.Width, face.FaceRectangle.Top + face.FaceRectangle.Height), paint);
                            canvas.DrawLine(new SKPoint(face.FaceRectangle.Left, face.FaceRectangle.Top + face.FaceRectangle.Height), new SKPoint(face.FaceRectangle.Left + face.FaceRectangle.Width, face.FaceRectangle.Top + face.FaceRectangle.Height), paint);
                        }
                    }
                }

                canvasView.InvalidateSurface();
            }
            await DisplayAlert("通知", "分析完成", "OK");
        }
Esempio n. 24
0
        private void RenderPicker(int w = 0, int h = 0)
        {
            var disp = Dispatcher;

            double width  = w > 0 ? w : this.Width;
            double height = h > 0 ? h : this.Height;

            if (width == -1 || height == -1)
            {
                return;
            }

            double colorVal = this.ColorValue;
            double offset   = this.HueOffset;
            bool   invert   = this.InvertSaturation;
            float  esize    = this.ElementSize;

            ColorPickerMode mode = this.Mode;

            _ = Task.Run(() =>
            {
                ColorPickerRenderer cw;

                if (w <= 0)
                {
                    if (double.IsNaN(width))
                    {
                        return;
                    }
                    w = (int)width;
                }
                if (h <= 0)
                {
                    if (double.IsNaN(height))
                    {
                        return;
                    }
                    h = (int)height;
                }

                if (w < 32 || h < 32)
                {
                    return;
                }

                if (mode == ColorPickerMode.Wheel || mode == ColorPickerMode.HexagonWheel)
                {
                    int rad;

                    if (h < w)
                    {
                        rad = h / 2;
                        w   = h;
                    }
                    else
                    {
                        rad = w / 2;
                        h   = w;
                    }

                    cw = new ColorPickerRenderer(rad, colorVal, offset, invert, true);
                }
                else
                {
                    cw = new ColorPickerRenderer(w, h, colorVal, offset, invert, mode == ColorPickerMode.LinearVertical, true);
                }

                Device.BeginInvokeOnMainThread(() =>
                {
                    SKImage img;
                    SKBitmap bmp = new SKBitmap((int)cw.Bounds.Width, (int)cw.Bounds.Height, SKColorType.Bgra8888, SKAlphaType.Premul);

                    var ptr = bmp.GetPixels();

                    unsafe
                    {
                        var gch = GCHandle.Alloc(cw.ImageBytes, GCHandleType.Pinned);

                        Buffer.MemoryCopy((void *)gch.AddrOfPinnedObject(), (void *)ptr, cw.ImageBytes.Length, cw.ImageBytes.Length);
                        gch.Free();
                    }

                    bmp.SetImmutable();
                    img = SKImage.FromBitmap(bmp);

                    SKData encoded = img.Encode();
                    Stream stream  = encoded.AsStream();

                    var ret = ImageSource.FromStream(() => stream);

                    cpRender          = cw;
                    PickerSite.Source = ret;
                });
            });
        }