ID2D1Bitmap 和 ID2D1Bitmap1 互转只要调用
ID2D1Bitmap->CopyFromBitmap(); 就可以了
注:ID2D1Bitmap是设备相关的资源,同一个呈现器创建的bitmap才可以互相拷贝。
ID2D1Bitmap1 map的用法
如果要使用map,生成ID2D1Bitmap1的时候一定要使用
D2D1_BITMAP_OPTIONS_CPU_READ
ComPtr<ID2D1Bitmap1> bitmap1;
D2D1_BITMAP_PROPERTIES1 prop = D2D1::BitmapProperties1(
D2D1_BITMAP_OPTIONS_CPU_READ | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE
)
);
HRESULT hr = m_d2dDeviceContext->CreateBitmap(
D2D1::SizeU(m_Width,m_Height),
nullptr,
0,
&prop,
&bitmap1
);
D2D1_POINT_2U point =D2D1::Point2U(0,0);
D2D1_RECT_U rect2 = D2D1::RectU(0,0,m_Width,m_Height);
hr = bitmap1->CopyFromBitmap(&point,m_D2d1BitmapOri.Get(),&rect2);
D2D1_MAP_OPTIONS options = D2D1_MAP_OPTIONS_READ;
D2D1_MAPPED_RECT mappedRect;
Array<byte>^ pData = ref new Array<byte>(m_Width*m_Height*4);
hr = bitmap1->Map(options, &mappedRect);
memcpy(pData->Data, mappedRect.bits, m_Width*m_Height*4);
hr = bitmap1->Unmap();
return pData;
备份