这是 Tom 在 VB 中的示例,稍作修改。
Private Function ConvertBitmap(m_renderTarget As RenderTarget, bmp As System.Drawing.Bitmap) As SharpDX.Direct2D1.Bitmap
Dim bmpData As System.Drawing.Imaging.BitmapData = bmp.LockBits(
New System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
Dim stream As New SharpDX.DataStream(bmpData.Scan0, bmpData.Stride * bmpData.Height, True, False)
Dim pFormat As New SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.B8G8R8A8_UNorm, AlphaMode.Premultiplied)
Dim bmpProps As New SharpDX.Direct2D1.BitmapProperties(pFormat)
Dim Result As New SharpDX.Direct2D1.Bitmap(
m_renderTarget,
New SharpDX.Size2(bmp.Width, bmp.Height),
stream,
bmpData.Stride,
bmpProps)
bmp.UnlockBits(bmpData)
stream.Dispose()
bmp.Dispose()
Return Result
End Function
通过在函数调用中提供渲染目标和位图,我可以在 Lambda 语句中使用该函数将位图放置在由 dalance 提供的 D2dControl 中的资源缓存中(在 NuGet 中可用)。此外,由于我将位图作为资源加载到我的项目中,我可以简单地在函数调用中提供它们:
Public Sub New()
...
resCache.Add("MainBitmap", Function(t As RenderTarget) ConvertBitmap(t, My.Resources.ProjectUtumno_full))
End Sub
Public Overrides Sub Render(target As RenderTarget)
target.Clear(New RawColor4(1.0F, 1.0F, 1.0F, 1.0F))
...
target.DrawBitmap(resCache("MainBitmap"), 1.0F, New BitmapInterpolationMode())
end sub