2

管理されていないコントロールから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);

前もって感謝します..

4

1 に答える 1

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

原著

于 2012-04-11T19:44:06.757 に答える