是否可以获取对 system.drawing.graphics 类的原始图像缓冲区的引用

本文关键字:原始 图像 引用 缓冲区 graphics drawing 获取 system 是否 | 更新日期: 2023-09-27 18:30:50

我正在尝试将图像从非托管控件呈现到 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);

提前感谢..

是否可以获取对 system.drawing.graphics 类的原始图像缓冲区的引用

这是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;
}

原文