我正在尝试将刚刚从压缩文件提取到内存中的图像文件(png,但可以是任何东西)转换为 ID2D1Bitmap,以便使用 Direct 2D 进行绘制。我试图寻找一些文档,但我只能找到接收“const char* path”或询问我图像的宽度和高度的方法,而我事先无法知道这些。
在谷歌上搜索它却一无所获。
该文件在内存中是原始文件,我想避免将图像提取到硬盘到临时文件中只是为了从那里读取数据。
有任何想法吗?
如果你有 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;
使用渲染目标将数据转换为 ID2D1Bitmap
pRT->CreateBitmap(bmpSize, pBuff, 4 * bmpSizeInfo.bmWidth, bmpPorp, &pBmpFromH);
希望这能有所帮助。
Sam
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)