C# SharpDx将位图保存到文件

C# SharpDx将位图保存到文件,c#,directx,sharpdx,C#,Directx,Sharpdx,我有一个来自渲染目标的Sharpdx Direct2D1位图。不过我想把它保存到一个文件中作为一个图像。这是为了测试目的。我不确定是否需要WIC位图,或者如何转换这些位图。或者如何首先接收WIC位图 此外,我也找不到一个简单的解释如何保存这个位图到一个文件一般 谢谢你的帮助 编辑: 我现在正在使用这种方法: 这是德语,但他说的是,你必须复制 将目标呈现给登台资源,以便通过cpu进行访问。然后将内容复制到位图 我正在尝试这种方法,最后使用bitmap.Save(文件名)。但不知何故,位图保持为空。

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

此外,我也找不到一个简单的解释如何保存这个位图到一个文件一般

谢谢你的帮助

编辑:

我现在正在使用这种方法:

这是德语,但他说的是,你必须复制 将目标呈现给登台资源,以便通过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中,则很容易将其移动到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位图

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


编辑部分中出现的问题通过不使用CopyResource(…)而使用CopySubResource(…)来解决,而使用默认参数来复制全部。我不知道为什么CopyResource(…)不起作用。

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

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

编辑部分中出现的问题通过不使用CopyResource(…)而使用CopySubResource(…)来解决,而使用默认参数来复制全部。我不知道为什么CopyResource(…)不起作用