SharpDx 将位图保存到文件

SharpDx Save Bitmap to File

我有一个来自渲染目标的 Sharpdx Direct2D1 位图。我想将它作为图像保存到文件中。这是为了测试目的。我不确定我是否需要 WIC 位图或如何转换这些位图。或者如何首先接收WIC位图。

我也找不到一个简单的解释如何将这个位图保存到一个文件中。

任何帮助appriciated。

编辑:

我现在正在使用这种方法:http://www.rolandk.de/wp/2013/06/inhalt-der-rendertarget-textur-in-ein-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);

可能有也可能没有更好的方法来解决这个问题。不过我用过的就是这个

这个问题由 Dan Bysröm 回答,如果你有 wicBitmap 然后简单地将数据复制到 gdi 位图。

我在编辑部分发布的 link 解决了我的特殊问题。我没有使用 wic 或任何东西,因为对于我的问题来说,这可能是一个完全错误的方法。

在编辑部分出现的问题已经通过不使用 CopyResource(...) 而是使用 CopySubResource(...) 而使用默认参数来全部复制解决了。我不确定为什么 CopyResource(...) 不起作用。