#if Net4 using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Drawing; using System.Runtime.InteropServices; using CPF.Drawing; namespace CPF.GDIPlus { public class GDIPlusBitmap : GDIPlusImage, IBitmapImpl { public System.Drawing.Bitmap Bitmap { get { return (System.Drawing.Bitmap)this.Image; } } public GDIPlusBitmap(System.Drawing.Image image):base(image) { } public GDIPlusBitmap(GDIPlusImage image) : base(new System.Drawing.Bitmap(image.Image)) { } public GDIPlusBitmap(int w, int h) : base(new System.Drawing.Bitmap(w, h)) { } public GDIPlusBitmap(Stream stream) : base(new System.Drawing.Bitmap(stream)) { } public GDIPlusBitmap(int w, int h, int pitch, PixelFormat pixelFormat, IntPtr data) { System.Drawing.Imaging.PixelFormat format = System.Drawing.Imaging.PixelFormat.Format32bppArgb; switch (pixelFormat) { case PixelFormat.Undefined: break; case PixelFormat.Bgra: format = System.Drawing.Imaging.PixelFormat.Format32bppArgb; break; case PixelFormat.PBgra: format = System.Drawing.Imaging.PixelFormat.Format32bppPArgb; break; default: throw new Exception("不支持格式:" + pixelFormat); } Image = new System.Drawing.Bitmap(w, h, pitch, format, data); } //public override PixelFormat PixelFormat //{ // get // { // if (bmp.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) // { // return PixelFormat.Format32bppArgb; // } // if (bmp.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppPArgb) // { // return PixelFormat.Format32bppPArgb; // } // return PixelFormat.Undefined; // } //} public void CopyToIntptr(IntPtr intPtr) { using (MemoryStream m = new MemoryStream()) { Bitmap.Save(m, System.Drawing.Imaging.ImageFormat.Bmp); byte[] bytes = m.ToArray(); Marshal.Copy(bytes, 0, intPtr, bytes.Length); } } //public void CopyToStream(Stream stream) //{ // Bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); //} public IBitmapLockImpl Lock() { return new GDIPlusBitmapLock(this); } public override object Clone() { return new GDIPlusBitmap(new System.Drawing.Bitmap(Bitmap));//(System.Drawing.Image)Bitmap.Clone() } } } #endif