我从渲染目标中具有SharpDx Direct2D1位图。我想将其保存到文件作为图像。这是出于测试目的。我不确定是否需要WIC位图或如何转换这些位图。或如何首先接收WIC位图。
也找不到简单的解释如何将此位图保存到一般的文件中。
任何帮助。
编辑:
我现在正在使用这种方法:http://www.rolandk.de/wp/2013/06/inhalt-der-der-rendertarget-rendertarget-textur-textur-in-ein-in-bitmap-kopieren/
是德语,但他说的是,您必须复制将目标渲染到分期资源,以通过CPU访问。然后将内容复制到位图。
我正在尝试这种方法,然后最终使用bitmap.save(文件名)。但是,以某种方式的位图停留为空。也许我想念正确编码文件。但似乎我完全没有从后缓冲区目标获得数据。
如果您在wicbitmap中有图像,则将其移至gdi 位图并从那里保存非常容易:
var pixelData = new byte[width*height*4];
wicBitmap.CopyPixels(pixelData, width*4);
var bmp = new System.Drawing.Bitmap(width, height);
var bd = bmp.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageLockMode.WriteOnly,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Marshal.Copy(pixelData, 0, bd.Scan0, pixelData.Length);
bmp.UnlockBits(bd);
可能有更好的方法来解决这个问题。但这是我成功使用的。
如果您有wicbitmap,则该问题由DanBysröm回答,然后简单地将数据复制到GDI位图。
我在编辑部分中发布的链接解决了我的特殊问题。我没有使用WIC或其他任何东西,因为这可能首先是我问题的完全错误的方法。
编辑部分中出现的问题是通过不使用copyresource(...)而不是copysubresource(...)而不是默认参数来复制全部来解决的。我不确定为什么CopyResource(...)不起作用。