该文件已在内存中,我希望避免将图像提取到临时文件中再从那里读取数据。
有什么想法吗?
如果您有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
delete[] pBuff;
。 - Sam
IWICStream
加载它,然后使用CreateBitmapFromWicBitmap
获取您的ID2D1Bitmap
- MSDN上有示例,所以我很惊讶您没有找到任何内容。 - Roger Rowland