protected Raster(Buffer.Sized buffer, global::Cairo.Surface backend, Geometry2D.Integer.Size size) : base(backend, size) { this.Buffer = buffer; }
public static Image AsImage(this System.Drawing.Bitmap me) { Image result = null; if (me.NotNull()) { if (me.PixelFormat != System.Drawing.Imaging.PixelFormat.Format24bppRgb && me.PixelFormat != System.Drawing.Imaging.PixelFormat.Format32bppArgb) { // Bitmap data that we don't support we draw upon a ARGB bitmap and use that instead. System.Drawing.Bitmap newBitmap = new System.Drawing.Bitmap(me.Width, me.Height); using (System.Drawing.Graphics canvas = System.Drawing.Graphics.FromImage(newBitmap)) canvas.DrawImageUnscaled(me, 0, 0); me.Dispose(); me = newBitmap; } System.Drawing.Imaging.BitmapData data = me.LockBits(new System.Drawing.Rectangle(0, 0, me.Width, me.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, me.PixelFormat); Buffer.Sized buffer = new Buffer.Sized(data.Scan0, data.Stride * data.Height, (pointer) => { if (me.NotNull()) me.Dispose(); }); switch (me.PixelFormat) { case System.Drawing.Imaging.PixelFormat.Format24bppRgb: result = new Bgr(buffer, new Geometry2D.Integer.Size(me.Width, me.Height)); break; case System.Drawing.Imaging.PixelFormat.Format32bppArgb: result = new Bgra(buffer, new Geometry2D.Integer.Size(me.Width, me.Height)); break; } } return result; }