Exemplo n.º 1
0
		protected Raster(Buffer.Sized buffer, global::Cairo.Surface backend, Geometry2D.Integer.Size size) :
			base(backend, size)
		{
			this.Buffer = buffer;
		}
Exemplo n.º 2
0
		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;
		}