Exemplo n.º 1
0
 public async static Task <byte[]> ToByteArrayAsync(this Bitmap image, Abstractions.ImageFormat format, int quality = 100)
 {
     byte[] resultArray = null;
     using (MemoryStream outStream = new MemoryStream())
     {
         Bitmap.CompressFormat compressFormat = format == Abstractions.ImageFormat.JPG ? Bitmap.CompressFormat.Jpeg : Bitmap.CompressFormat.Png;
         image.Compress(compressFormat,
                        quality, outStream);
         resultArray = outStream.ToArray();
     };
     return(resultArray);
 }
        /// <summary>
        /// Scales an image.
        /// </summary>
        /// <returns>The scaled image.</returns>
        /// <param name="originalImage">Original image.</param>
        /// <param name="finalImagePercentage">Final image percentage.</param>
        /// <param name="imageFormat">Image format Jpg or Png.</param>
        public async Task <byte[]> ScaleImageAsync(byte[] originalImage, double finalImagePercentage, Abstractions.ImageFormat imageFormat)
        {
            Bitmap bitmap = await originalImage.ToBitmapAsync();

            int width       = bitmap.Width;
            int height      = bitmap.Height;
            int scaleWidth  = Convert.ToInt16(width * (finalImagePercentage * .01));
            int scaleHeight = Convert.ToInt16(height * (finalImagePercentage * .01));

            return(await ResizeImageAsync(originalImage, scaleHeight, scaleWidth, imageFormat));
        }
        /// <summary>
        /// Resizes an image.
        /// </summary>
        /// <returns>The resized image.</returns>
        /// <param name="originalImage">Original image.</param>
        /// <param name="newHeight">New height.</param>
        /// <param name="newWidth">New width.</param>
        /// <param name="imageFormat">Image format Jpg or Png.</param>
        public async Task <byte[]> ResizeImageAsync(byte[] originalImage, int newHeight, int newWidth, Abstractions.ImageFormat imageFormat)
        {
            byte[] resultScaledImage = null;
            Bitmap bitmap            = await originalImage.ToBitmapAsync();

            Bitmap scaledBitmap = Bitmap.CreateScaledBitmap(bitmap, newWidth, newHeight, false);

            resultScaledImage = await scaledBitmap.ToByteArrayAsync(imageFormat);

            return(resultScaledImage);
        }
        public async Task <byte[]> RotateImageAsync(byte[] originalImage, SideOrientation orientation, Abstractions.ImageFormat imageFormat)
        {
            byte[] resultRotatedImage = null;
            Bitmap bitmap             = await originalImage.ToBitmapAsync();

            Matrix matrix = new Matrix();

            matrix.PostRotate(orientation == SideOrientation.RotateToRigth ? 90 : -90);

            Bitmap rotatedBitmap = Bitmap.CreateBitmap(bitmap, 0, 0, bitmap.Width, bitmap.Height, matrix, true);

            resultRotatedImage = await rotatedBitmap.ToByteArrayAsync(imageFormat);

            return(resultRotatedImage);
        }
        public async static Task <byte[]> ToByteArrayAsync(this WriteableBitmap image, Abstractions.ImageFormat format, int quality = 100)
        {
            byte[]          resultArray     = null;
            WriteableBitmap writeableBitmap = image;

            using (IRandomAccessStream ms = new InMemoryRandomAccessStream())
            {
                try
                {
                    byte[] bytes;
                    using (Stream stream = image.PixelBuffer.AsStream())
                    {
                        bytes = new byte[(uint)stream.Length];
                        await stream.ReadAsync(bytes, 0, bytes.Length);
                    }

                    BitmapPropertySet propertySet  = new BitmapPropertySet();
                    BitmapTypedValue  qualityValue = new BitmapTypedValue(
                        quality * .01,
                        Windows.Foundation.PropertyType.Single
                        );
                    propertySet.Add("ImageQuality", qualityValue);

                    BitmapEncoder encoder = null;
                    if (format == Abstractions.ImageFormat.PNG)
                    {
                        encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ms);
                    }
                    else
                    {
                        encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, ms, propertySet);
                    }

                    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                                         BitmapAlphaMode.Ignore,
                                         (uint)image.PixelWidth,
                                         (uint)image.PixelHeight,
                                         96,
                                         96,
                                         bytes);

                    await encoder.FlushAsync();

                    resultArray = new byte[ms.AsStream().Length];
                    await ms.AsStream().ReadAsync(resultArray, 0, resultArray.Length);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
            }

            return(resultArray);
        }