SharpDX.Direct2D1.位图来自Texture2D

本文关键字:Texture2D 位图 Direct2D1 SharpDX | 更新日期: 2023-09-27 18:07:20

我试图创建一个屏幕外的位图来绘制它,然后用Direct2D1.RenderTarget.DrawBitmap绘制它。所以我创建Texture2D并从中获取位图。但是我收到了错误

[D2DERR_UNSUPPORTED_PIXEL_FORMAT/UnsupportedPixelFormat] 
最后一串代码中的

。请帮助我理解,我在这里做错了什么?

    m_texture = new Texture2D(
            context.Device,
            new Texture2DDescription() {
                ArraySize = 1,
                BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource,
                CpuAccessFlags = CpuAccessFlags.None,
                Format = Format.B8G8R8A8_UNorm,
                Height = bitmapSize.Height,
                Width = bitmapSize.Width,
                MipLevels = 1,
                OptionFlags = ResourceOptionFlags.None,
                SampleDescription = new SampleDescription() {
                    Count = 1,
                    Quality = 0
                },
                Usage = ResourceUsage.Default
            }
        );
        m_surface = m_texture.QueryInterface<Surface>();
        using (SharpDX.Direct2D1.Factory factory = new SharpDX.Direct2D1.Factory()) {
            m_renderTarget = new RenderTarget(
                factory,
                m_surface,
                new RenderTargetProperties() {
                    DpiX = 0.0f, // default dpi
                    DpiY = 0.0f, // default dpi
                    MinLevel = SharpDX.Direct2D1.FeatureLevel.Level_DEFAULT,
                    Type = RenderTargetType.Hardware,
                    Usage = RenderTargetUsage.None,
                    PixelFormat = new SharpDX.Direct2D1.PixelFormat(
                        Format.Unknown,
                        AlphaMode.Premultiplied
                    )
                }
            );
        }
        m_bitmap = new SharpDX.Direct2D1.Bitmap(m_renderTarget, m_surface);

SharpDX.Direct2D1.位图来自Texture2D

  public static SharpDX.Direct2D1.Bitmap GetBitmapFromSRV(SharpDX.Direct3D11.ShaderResourceView srv, RenderTarget renderTarger)
    {
        using (var texture = srv.ResourceAs<Texture2D>())
        using (var surface = texture.QueryInterface<Surface>())
        {
            var bitmap = new SharpDX.Direct2D1.Bitmap(renderTarger, surface, new SharpDX.Direct2D1.BitmapProperties(new SharpDX.Direct2D1.PixelFormat(
                                                      Format.R8G8B8A8_UNorm,
                                                      SharpDX.Direct2D1.AlphaMode.Premultiplied)));
            return bitmap;
        }
    }