using System.Drawing; using System.IO; using System.Runtime.InteropServices; namespace RenderHookAPI.Interface { public static class ScreenshotExtensions { public static Bitmap ToBitmap(this byte[] data, int width, int height, int stride, System.Drawing.Imaging.PixelFormat pixelFormat) { GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); try { var img = new Bitmap(width, height, stride, pixelFormat, handle.AddrOfPinnedObject()); return img; } finally { if (handle.IsAllocated) handle.Free(); } } public static Bitmap ToBitmap(this Screenshot screenshot) { if (screenshot.Format == ImageFormat.PixelData) { return screenshot.Data.ToBitmap(screenshot.Width, screenshot.Height, screenshot.Stride, screenshot.PixelFormat); } else { return screenshot.Data.ToBitmap(); } } public static Bitmap ToBitmap(this byte[] imageBytes) { MemoryStream ms = new MemoryStream(imageBytes); try { return (Bitmap)Image.FromStream(ms); } catch { return null; } } public static byte[] ToByteArray(this Image img, System.Drawing.Imaging.ImageFormat format) { using (MemoryStream stream = new MemoryStream()) { img.Save(stream, format); stream.Close(); return stream.ToArray(); } } } }