2 using System.Drawing;
\r
3 using System.Drawing.Imaging;
\r
4 using System.Diagnostics;
\r
5 using System.Windows.Forms;
\r
6 using D2DBench.Properties;
\r
8 using SharpDX.Direct2D1;
\r
9 using SharpDX.DirectWrite;
\r
10 using System.Runtime.InteropServices;
\r
12 using D2D1 = SharpDX.Direct2D1;
\r
13 using DW = SharpDX.DirectWrite;
\r
14 using Drawing = System.Drawing;
\r
18 class Method4 : IBench
\r
20 public int fillAreaSize { get { return bmpSize.Width * bmpSize.Height * Form1.ExecuteCountPerOneset; } }
\r
21 public string methodName { get { return "D2DBitBlt"; } }
\r
23 D2D1.Factory Factory2D;
\r
24 DW.Factory FactoryDWrite;
\r
25 WindowRenderTarget render;
\r
26 Drawing.Size ClientSize;
\r
28 const string showStr = "D2DBenchMark";
\r
29 Drawing.Size bmpSize;
\r
32 public void Init(Control ctrl, bool antialias)
\r
34 ClientSize = ctrl.ClientSize;
\r
35 Factory2D = new SharpDX.Direct2D1.Factory();
\r
36 FactoryDWrite = new SharpDX.DirectWrite.Factory();
\r
37 HwndRenderTargetProperties hwndprops = new HwndRenderTargetProperties { Hwnd = ctrl.Handle, PixelSize = ClientSize, PresentOptions = PresentOptions.Immediately };
\r
38 render = new WindowRenderTarget(Factory2D, new RenderTargetProperties(), hwndprops);
\r
39 bmpSize = Resources.image.Size;
\r
40 bmp = Load(render, Resources.image);
\r
42 render.AntialiasMode = antialias ? AntialiasMode.PerPrimitive : AntialiasMode.Aliased;
\r
45 public void Dispose()
\r
49 Factory2D.Dispose();
\r
50 FactoryDWrite.Dispose();
\r
56 for (int i = 0; i < Form1.ExecuteCountPerOneset; i++)
\r
58 SharpDX.RectangleF rect = new SharpDX.RectangleF();
\r
59 rect.Left = rnd.Next(ClientSize.Width);
\r
60 rect.Top = rnd.Next(ClientSize.Height);
\r
61 rect.Right = rect.Left + bmpSize.Width;
\r
62 rect.Bottom = rect.Top + bmpSize.Height;
\r
63 render.DrawBitmap(bmp, rect, 1.0f, BitmapInterpolationMode.NearestNeighbor);
\r
68 D2D1.Bitmap Load(WindowRenderTarget render, Drawing.Bitmap srcBitmap)
\r
70 var bitmapData = srcBitmap.LockBits(
\r
71 new Drawing.Rectangle(0, 0, srcBitmap.Width, srcBitmap.Height),
\r
72 System.Drawing.Imaging.ImageLockMode.ReadOnly,
\r
73 System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
\r
75 var stream = new DataStream(bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, true, false);
\r
77 var properties = new BitmapProperties()
\r
79 PixelFormat = new D2D1.PixelFormat(SharpDX.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied)
\r
81 var bitmap = new D2D1.Bitmap(render, srcBitmap.Size, stream, bitmapData.Stride, properties);
\r
83 srcBitmap.UnlockBits(bitmapData);
\r