当前位置: 首页 > 工具软件 > SharpDX > 使用案例 >

dx绘制2d图像_如何获得SharpDX Direct2D位图中的像素的颜色或渲染目标?

庄实
2023-12-01

由于我正在使用的algorithm接受System.Drawing.Bitmap我只需要一种方法来捕获渲染帧到一个,然后渲染结果,这是远远没有效率,但我有一个解决scheme。

该解决scheme使用WIN API中的PrintWindow。

[DllImport("user32.dll")] public static extern bool PrintWindow(IntPtr hWnd, IntPtr hdcBlt, int nFlags);

如果使用embedded式SharpDX控件作为通过句柄捕捉控件将不会执行,但是捕获父控件(在此情况下为表单)将返回所需的图像。

System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(Width, Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(bmp); IntPtr hdcBitmap = g.GetHdc(); PrintWindow(Handle, hdcBitmap, 0); g.ReleaseHdc(hdcBitmap); g.Dispose(); // Crop the image to return only the part that we need, without control borders. bmp.Clone(new Rectangle(SharpDXControl.Location.X + 1, SharpDXControl.Location.Y + 1, SharpDXControl.Width - 2, SharpDXControl.Height - 2), bmp.PixelFormat);

为了绘制图像,我创建了一个新的SharpDX.Direct2D1.Bitmap实例,并使用了System.Drawing.Bitmap实例中的像素数据(位)。

SharpDX.Direct2D1.Bitmap dxbmp = new SharpDX.Direct2D1.Bitmap(renderTarget, new SharpDX.Size2(bmpWidth, bmpHeight), new BitmapProperties(renderTarget.PixelFormat)); dxbmp.CopyFromMemory(bmpBits, bmpWidth * 4); renderTarget.DrawBitmap(dxbmp, 1F, SharpDX.Direct2D1.BitmapInterpolationMode.Linear); dxbmp.Dispose();

我正在使用的algorithm是队列 – 线性洪泛填充algorithm的稍微修改版本。

 类似资料: