2017-07-06 2 views
2

現在、SharpDX.Direct2D1を使用して2Dアプリケーションを作成中です。SharpDX.Direct2D1.Bitmapのグレースケール8BPPビットマップ

正しく動作する2D deviceContextの設定です。

m_swapchaindesc = New SwapChainDescription() 
    With m_swapchaindesc 
     .BufferCount = 2 
     .ModeDescription = 
      New ModeDescription(control.Width, control.Height, 
           New Rational(60, 1), Format.R8G8B8A8_UNorm) 
     .IsWindowed = True 
     .OutputHandle = control.Handle 
     .SampleDescription = New SampleDescription(1, 0) 
     .SwapEffect = SwapEffect.Discard 
     .Usage = Usage.RenderTargetOutput 
    End With 

    SharpDX.Direct3D11.Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport Or DeviceCreationFlags.Debug, m_swapchaindesc, m_device, m_swapChain) 

    Dim dxgiDevice As SharpDX.DXGI.Device = m_device.QueryInterface(Of SharpDX.DXGI.Device)() 

    m_2dDevice = New SharpDX.Direct2D1.Device(dxgiDevice) 
    m_d2dContext = New SharpDX.Direct2D1.DeviceContext(m_2dDevice, SharpDX.Direct2D1.DeviceContextOptions.None) 

    m_properties = New BitmapProperties(New SharpDX.Direct2D1.PixelFormat(SharpDX.DXGI.Format.R8G8B8A8_UNorm, SharpDX.Direct2D1.AlphaMode.Premultiplied), 96, 96) 

    m_backBuffer = m_swapChain.GetBackBuffer(Of Surface)(0) 

    m_2dTarget = New SharpDX.Direct2D1.Bitmap(m_d2dContext, m_backBuffer, m_properties) 
    m_d2dContext.Target = m_2dTarget 

私の質問:私はメモリのlooootを取るピクセルあたり32ビットであることを、それを必要としないことを意味し、私のdeviceContextに、グレースケール、上の8bppのビットマップを描きたいです。私はそれがメモリの目的のためにわずか8ビットであることを望みます。私がそうするときの問題は、私がBitmapPropertiesを設定することを意味し、Format.R8_UnormまたはFormat.A8_Unormしかありません。私は彼らが8bppしか持っていないと思うので面白そうです。しかし、私はこのフォーマットを入れて、SharpDX.Direct2D1.Bitmapをインスタンス化しようとしていますが、WRONGPIXELFORMATというエラーメッセージを返します。

ビットマップを作成するときにはFormat.R8G8B8A8_Unormしか動作しないように見えましたが、これは必要ありません。

SharpDXの8bppグレースケールビットマップで作業している人はいますか?

答えて

0

SharpDX(DirectX)で8BPPビットマップを使用することはできません。これはDirectXではサポートされていない形式です。グレースケール画像を表示するには、rgbの値をすべて同じ値に設定するか、すべての色をグレーに変換するシェーダを画像に適用する必要があります。

関連する問題