我正在尝试将图像从非托管控件渲染到WPF窗口。到目前为止,我能够获得一个工作的图形对象(因为我能够将图像叠加到非托管控件上)。我希望做的是相反的,即从图形对象捕获图像并保存为另一个控件的图像源。
var graphics = Graphics.FromHwnd(hwndPtr);//From image unmanaged source
graphics.(??) // save to bitmap or any image format
如果不能直接用图形对象保存图像,是否可以获得图形对象图像缓冲区的原始引用? (用于下面的代码)
var bmp = (InteropBitmap)Imaging.CreateBitmapSourceFromMemorySection(
hwntPtr,120,120,format,stride,0);
先谢谢..
答案 0 :(得分:0)
这是MSDN论坛文章中稍微修改过的代码,但它应该可以解决从System.Drawing.Graphics对象获取System.Drawing.Bitmap的问题。
[DllImport("coredll.dll", SetLastError = true)]
internal static extern bool BitBlt(IntPtr hDest, int nDstX, int nDstY, int nWidth, int nHeight, IntPtr hSrc, int nSrcX, int nSrcY, uint BitBltOperation);
Bitmap SaveAsBitmap(Graphics gxSrc, int sizeX, int SizeY)
{
Bitmap bm = new Bitmap(sizeX, sizeY);
Graphics gxDst = Graphics.FromImage(bm);
IntPtr hSrc = gxSrc.GetHdc();
IntPtr hDst = gxDst.GetHdc();
BitBlt(hDst, 0, 0, sizeX, sizeY, hSrc, 0, 0, 0xcc0020); // SourceCopy operation
gxDst.ReleaseHdc(hDst);
gxSrc.ReleaseHdc(hSrc);
gxDst.Dispose();
return bm;
}