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