12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.IO;
- using Android.Content;
- using Android.Graphics;
- using Android.Media;
- using Java.IO;
- using Bitmap = Android.Graphics.Bitmap;
- using File = System.IO.File;
- using Path = System.IO.Path;
- [assembly: Xamarin.Forms.Dependency(typeof(InABox.Mobile.Android.ImageToolsDroid))]
- namespace InABox.Mobile.Android
- {
- public class ImageToolsDroid: IImageTools
- {
- public byte[] CreateVideoThumbnail(byte[] video, float maxwidth, float maxheight)
- {
- byte[] result = null;
- var filename = Path.Combine(
- Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
- $"{Guid.NewGuid().ToString()}.tmp"
- );
- File.WriteAllBytes(filename,video);
- using (FileInputStream fs = new FileInputStream(filename))
- {
- FileDescriptor fd = fs.FD;
- MediaMetadataRetriever retriever = new MediaMetadataRetriever();
- retriever.SetDataSource(fd);
- Bitmap bitmap = retriever.GetFrameAtTime(0);
- if (bitmap != null)
- {
- MemoryStream stream = new MemoryStream();
- bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
- result = stream.ToArray();
- }
- }
- File.Delete(filename);
- if (result != null)
- result = CreateThumbnail(result, maxwidth, maxheight);
- return result;
- }
-
- public byte[] CreateThumbnail(byte[] source, float maxwidth, float maxheight)
- {
- byte[] result = { };
- using (var image = BitmapFactory.DecodeByteArray(source, 0, source.Length))
- {
- if (image != null)
- {
- var size = new Size((int)image.GetBitmapInfo().Height, (int)image.GetBitmapInfo().Width);
- if ((size.Width > 0) && (size.Height > 0))
- {
- var maxFactor = Math.Min(maxwidth / size.Width, maxheight / size.Height);
- var width = maxFactor * size.Width;
- var height = maxFactor * size.Height;
- using (var tgt = Bitmap.CreateScaledBitmap(image, (int)height, (int)width, true))
- {
- if (tgt != null)
- {
- using (var ms = new MemoryStream())
- {
- tgt.Compress(Bitmap.CompressFormat.Jpeg, 95, ms);
- result = ms.ToArray();
- }
- tgt.Recycle();
- }
- }
- }
- image.Recycle();
- }
- }
- return result;
- }
- }
- }
|