【问题标题】:SharpDx Save Bitmap to FileSharpDx 将位图保存到文件
【发布时间】:2017-11-21 11:07:35
【问题描述】:

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

我也找不到一个简单的解释,一般来说如何将此位图保存到文件中。

任何帮助appriciated。

编辑:

我现在正在使用这种方法:http://www.rolandk.de/wp/2013/06/inhalt-der-rendertarget-textur-in-ein-bitmap-kopieren/

是德语的,但他说的是,你必须复制 将目标渲染到暂存资源以通过 cpu 进行访问。然后将内容复制到位图上。

我正在尝试这种方法,然后最终使用 bitmap.Save(filename)。但不知何故,位图保持为空。也许我错过了正确编码文件。但似乎我根本没有从后台缓冲区目标获取数据。

【问题讨论】:

    标签: c# directx sharpdx


    【解决方案1】:

    如果您的图像在 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);
    

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

    【讨论】:

      【解决方案2】:

      Dan Bysröm 回答了这个问题,如果您有 wicBitmap,然后只需将数据复制到 gdi 位图。

      我通过在编辑部分发布的链接解决了我的特殊问题。我没有使用 wic 或任何东西,因为这可能是解决我的问题的一种完全错误的方法。

      编辑部分出现的问题是通过不使用 CopyResource(...) 而是使用 CopySubResource(...) 来解决的,而是使用默认参数来复制所有内容。我不确定为什么 CopyResource(...) 不起作用。

      【讨论】:

        猜你喜欢
        • 2013-03-16
        • 2011-05-08
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 2013-11-04
        • 1970-01-01
        相关资源
        最近更新 更多