我正在尝试将我刚刚从压缩文件提取到内存中的图像文件(png,但是可以是任何东西)转换为ID2D1Bitmap,以使用Direct 2D进行绘制。我试图寻找一些文档,但是我只能找到事先无法知道的接收“const char * path”或询问图像宽度和高度的方法。
在谷歌搜索它让我无处可去。

该文件是原始内存,因此我想避免将图像提取到HDD到一个临时文件中,只是从那里读取它们的数据。

有任何想法吗?

最佳答案

如果您具有HBITMAP句柄,则可以执行以下操作:

  • 使用的图像大小:::GetObject(hBmp, sizeof(BITMAP), &bmpSizeInfo);
  • 像这样填充BITMAPINFO:memset(&bmpData, 0, sizeof(BITMAPINFO));bmpData.bmiHeader.biSize = sizeof(bmpData.bmiHeader);bmpData.bmiHeader.biHeight = -bmpSizeInfo.bmHeight;bmpData.bmiHeader.biWidth = bmpSizeInfo.bmWidth;bmpData.bmiHeader.biPlanes = bmpSizeInfo.bmPlanes;bmpData.bmiHeader.biBitCount = bmpSizeInfo.bmBitsPixel;
  • 创建足够的堆内存来保存位图的数据:pBuff = new char[bmpSizeInfo.bmWidth * bmpSizeInfo.bmHeight * 4];
  • 获取位图数据,如下所示:::GetDIBits(hDc, hBmp, 0, bmpSizeInfo.bmHeight, (void*)pBuff, &bmpData, DIB_RGB_COLORS);
  • 创建一个D2D1_BITMAP_PROPERTIES并像这样填充它:bmpPorp.dpiX = 0.0f;bmpPorp.dpiY = 0.0f;bmpPorp.pixelFormat.format = DXGI_FORMAT_B8G8R8A8_UNORM;bmpPorp.pixelFormat.alphaMode = D2D1_ALPHA_MODE_IGNORE;
  • 使用渲染目标将数据转换为ID2D1BitmappRT->CreateBitmap(bmpSize, pBuff, 4 * bmpSizeInfo.bmWidth, bmpPorp, &pBmpFromH);

  • 希望这会有所帮助。

    山姆

    关于c++ - 如何在C++中将内存中加载的图像文件转换为ID2D1Bitmap,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26566849/

    10-09 20:09