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