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(...) 不起作用。
我有一个来自渲染目标的 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(...) 不起作用。