代码之家  ›  专栏  ›  技术社区  ›  Mike Caron

在C++/CLI中如何从RelDebug目标位图中获得位图结构?

  •  1
  • Mike Caron  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  2
  •   Mike Caron    16 年前

    事实证明,这比简单地使用CopyPixels要复杂一些。

    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一样使用它。

        2
  •  1
  •   Ben Voigt    16 年前

    BitmapSource.CopyPixels SetDIBits ? 当然,在通常的CreateCompatibleBitmap/CreateCompatibleDC/SelectObject咒语之后。

    推荐文章