.net 如何从C+;中的RenderTargetBitmap获取位图结构+/CLI?

.net 如何从C+;中的RenderTargetBitmap获取位图结构+/CLI?,.net,wpf,c++-cli,bitmap,gdi,.net,Wpf,C++ Cli,Bitmap,Gdi,我在C++/CLI中有一个WPF RenderTargetBitmap,我希望能够从中创建一个位图结构,以便与BitBlt一起使用。我以前很少使用位图或RenderTargetBitmap,所以任何想法都很好 我们一起去怎么样?当然,在通常的CreateCompatibleBitmap/CreateCompatibleDC/SelectObject咒语之后。证明它比简单地使用CopyPixels要复杂一些 在C++/CLI托管代码中,我执行以下操作: virtual BOOL fillBitma

我在C++/CLI中有一个WPF RenderTargetBitmap,我希望能够从中创建一个位图结构,以便与BitBlt一起使用。我以前很少使用位图或RenderTargetBitmap,所以任何想法都很好

我们一起去怎么样?当然,在通常的CreateCompatibleBitmap/CreateCompatibleDC/SelectObject咒语之后。

证明它比简单地使用CopyPixels要复杂一些

在C++/CLI托管代码中,我执行以下操作:

virtual BOOL fillBitmap(CDC* dc, CBitmap* bmp)
{   
  WPFContainer^ page = getWPFContainer();

  // Get a bitmap from the DVE page
  RenderTargetBitmap ^rtb = gcnew RenderTargetBitmap(page->ActualWidth, page->ActualHeight, 96, 96, PixelFormats::Default);
  rtb->Render(page);

  // fill up the passed in bitmap with the bits from WPF
  BITMAPINFO bmi;
  ZeroMemory(&bmi, sizeof(BITMAPINFO));
  bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  bmi.bmiHeader.biWidth = rtb->PixelWidth;
  bmi.bmiHeader.biHeight = -rtb->PixelHeight;   /* Use a Negative height so that we copy the bits from TOP to BOTTOM with CopyPixels below */
  bmi.bmiHeader.biPlanes = 1;
  bmi.bmiHeader.biBitCount = 32;
  bmi.bmiHeader.biCompression = BI_RGB;
  bmi.bmiHeader.biSizeImage = rtb->PixelWidth * rtb->PixelHeight * 4;

  void* pBmpPixels;
  bmp->Attach(CreateDIBSection(*dc, &bmi, DIB_RGB_COLORS, &pBmpPixels, NULL, 0));

  if (NULL != pBmpPixels)
  {
    Int32Rect rTemp(0,0,0,0);
    IntPtr ipTemp(pBmpPixels);
    rtb->CopyPixels(rTemp, ipTemp, bmi.bmiHeader.biSizeImage, rtb->PixelWidth * 4);
  }

  return TRUE;
} override;

然后,我可以从非托管代码调用该例程,该代码传入我想要填充的CBitmap。然后我可以像使用任何本地CBitmap一样使用它。

您到底想做什么
BitBlt
不使用位图,它在设备上下文(DC)上工作,但您必须在源上下文中选择一个HBITMAP…谢谢,Ben。我来试试这个。