diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.ScreenCapture/ScreenCaptureFrame.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.ScreenCapture/ScreenCaptureFrame.cs | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Tango.ScreenCapture/ScreenCaptureFrame.cs b/Software/Visual_Studio/Tango.ScreenCapture/ScreenCaptureFrame.cs new file mode 100644 index 000000000..104bbccb1 --- /dev/null +++ b/Software/Visual_Studio/Tango.ScreenCapture/ScreenCaptureFrame.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Media.Imaging; + +namespace Tango.ScreenCapture +{ + public class ScreenCaptureFrame : IDisposable + { + private Bitmap _bitmap; + private Bitmap _diffBitmap; + + public int Width + { + get { return _bitmap.Width; } + } + + public int Height + { + get { return _bitmap.Height; } + } + + public bool HasDifferenceFrame + { + get { return _diffBitmap != null; } + } + + public ScreenCaptureFrame(Bitmap bitmap, Bitmap diffBitmap) + { + _diffBitmap = diffBitmap; + _bitmap = bitmap; + } + + public void Dispose() + { + _bitmap.Dispose(); + + if (_diffBitmap != null) + { + _diffBitmap.Dispose(); + } + } + + public BitmapSource ToBitmapSource() + { + var source = GetBitmapImage(ToStream()); + source.Freeze(); + return source; + } + + public Bitmap ToBitmap() + { + return _bitmap; + } + + public ScreenCaptureFrame ToDifferenceCaptureFrame() + { + return new ScreenCaptureFrame(_diffBitmap, null); + } + + public byte[] ToArray() + { + using (var ms = ToStream()) + { + return ms.ToArray(); + } + } + + public byte[] ToJpeg(int quality = 100) + { + var encoderParameters = new EncoderParameters(1); + encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + + using (MemoryStream ms = new MemoryStream()) + { + _bitmap.Save(ms, GetEncoder(ImageFormat.Jpeg), encoderParameters); + ms.Position = 0; + return ms.ToArray(); + } + } + + public byte[] ToPng() + { + using (MemoryStream ms = new MemoryStream()) + { + _bitmap.Save(ms, ImageFormat.Png); + ms.Position = 0; + return ms.ToArray(); + } + } + + public MemoryStream ToStream() + { + MemoryStream ms = new MemoryStream(); + _bitmap.Save(ms, ImageFormat.Bmp); + ms.Position = 0; + return ms; + } + + private BitmapImage GetBitmapImage(MemoryStream ms) + { + var bitmapImage = new BitmapImage(); + bitmapImage.BeginInit(); + bitmapImage.StreamSource = ms; + bitmapImage.EndInit(); + return bitmapImage; + } + + private ImageCodecInfo GetEncoder(ImageFormat format) + { + ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); + return codecs.Single(codec => codec.FormatID == format.Guid); + } + } +} |
