首页 > 代码库 > 将System.Drawing.Bitmap转换为Direct2D.D2DBitmap
将System.Drawing.Bitmap转换为Direct2D.D2DBitmap
最近在尝试Direct2D编程,挺好玩的。
但是有时候还是会用到GDI+来生成图片,但D2D绘图需要用到自己的D2DBitmap类。
因此需要转换,查阅了下网上的资料,写了这么一个方法:
1 using System; 2 using System.Windows.Forms; 3 using System.Linq; 4 using System.Text; 5 using System.Diagnostics; 6 using DX = SharpDX; 7 using D2D = SharpDX.Direct2D1; 8 using WIC = SharpDX.WIC; 9 using DDW = SharpDX.DirectWrite;10 using DXGI = SharpDX.DXGI;11 using SharpDX;12 13 public D2D.Bitmap ConvertFromSystemBitmap(System.Drawing.Bitmap bmp)14 {15 System.Drawing.Bitmap desBitmap;//预定义要是使用的bitmap16 //如果原始的图像像素格式不是32位带alpha通道17 //需要转换为32位带alpha通道的格式18 //否则无法和Direct2D的格式对应19 if (bmp.PixelFormat != System.Drawing.Imaging.PixelFormat.Format32bppPArgb)20 {21 desBitmap = new System.Drawing.Bitmap(bmp.Width, bmp.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);22 using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(desBitmap))23 {24 g.DrawImage(bmp, 0, 0);25 }26 }27 else28 {29 desBitmap = bmp;30 }31 32 33 //直接内存copy会非常快 34 //如果使用循环逐点转换会非常慢35 System.Drawing.Imaging.BitmapData bmpData =http://www.mamicode.com/ desBitmap.LockBits(36 new System.Drawing.Rectangle(0, 0, desBitmap.Width, desBitmap.Height),37 System.Drawing.Imaging.ImageLockMode.ReadOnly,38 desBitmap.PixelFormat39 );40 int numBytes = bmpData.Stride * desBitmap.Height;41 byte[] byteData = http://www.mamicode.com/new byte[numBytes];42 IntPtr ptr = bmpData.Scan0;43 System.Runtime.InteropServices.Marshal.Copy(ptr, byteData, 0, numBytes);44 desBitmap.UnlockBits(bmpData);45 46 47 48 D2D.BitmapProperties bp;49 D2D.PixelFormat pixelFormat = new D2D.PixelFormat(DXGI.Format.B8G8R8A8_UNorm, D2D.AlphaMode.Premultiplied);50 51 bp = new D2D.BitmapProperties(52 pixelFormat,53 desBitmap.HorizontalResolution,54 desBitmap.VerticalResolution55 );56 D2D.Bitmap tempBitmap = new D2D.Bitmap(_renderTarget, new Size2(desBitmap.Width, desBitmap.Height), bp);57 tempBitmap.CopyFromMemory(byteData, bmpData.Stride);58 59 return tempBitmap;60 }
PS.这里我用的是SharpDX组件,因为微软的Windows API Code Pack,只更新到1.1,2010年后就不维护了
将System.Drawing.Bitmap转换为Direct2D.D2DBitmap
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。