2016-07-20 15 views
1

レンダリングターゲットとしてSharpDX.Direct2DとWicBitmapを使ってビットマップ描画をしようとしています。
私のコードのようになります。私が作成しようとしています何透明な色でレンダリングターゲットをクリア

var wicFactory = new ImagingFactory(); 
var d2dFactory = new SharpDX.Direct2D1.Factory(); 

var wicBitmap = new SharpDX.WIC.Bitmap(wicFactory, width, height, 
    SharpDX.WIC.PixelFormat.Format32bppBGR, BitmapCreateCacheOption.CacheOnLoad); 
var renderTargetProperties = new RenderTargetProperties(RenderTargetType.Default, 
    new SharpDX.Direct2D1.PixelFormat(Format.B8G8R8A8_UNorm, SharpDX.Direct2D1.AlphaMode.Unknown), 
    0, 0, RenderTargetUsage.None, FeatureLevel.Level_DEFAULT); 

var d2dRenderTarget = new WicRenderTarget(d2dFactory, wicBitmap, renderTargetProperties); 

PathGeometry path = new PathGeometry(d2dFactory); 
// Create the path figures here ... 

SolidColorBrush brush = new SolidColorBrush(d2dRenderTarget, new RawColor4(1, 0, 0, 1)); 
d2dRenderTarget.BeginDraw(); 
// The problem is with this line 
d2dRenderTarget.Clear(new RawColor4(1, 1, 1, 0)); 
d2dRenderTarget.DrawGeometry(path, brush, lineWidth); 
d2dRenderTarget.EndDraw(); 

brush.Dispose(); 

path.Dispose(); 

bl = wicBitmap.Lock(BitmapLockFlags.Read); 
// imageData is a byte[] 
Marshal.Copy(bl.Data.DataPointer, imageData, 0, imageData.Length); 
bl.Dispose(); 

d2dRenderTarget.Dispose(); 
wicBitmap.Dispose(); 
d2dFactory.Dispose(); 
wicFactory.Dispose(); 

File.WriteAllBytes("image.raw", imageData); 

は、透明な背景を持つ画像です。 Clearメソッドは、PixelFormatのAlphaModeがUnknownまたはIgnoreの場合、クリアカラーのアルファチャンネルを無視します。 AlphaModeをStraightまたはPremultipliedに設定しようとすると、WicRenderTargetコンストラクターがCOMエラーで失敗します。パラメーターが間違っています。

Clearメソッドでアルファチャンネルが無視されないように、正しいパラメータの組み合わせは何ですか?

答えて

2

アルファチャンネルをサポートしていないSharpDX.WIC.PixelFormat.Format32bppBGRを使用してWicBitmapを作成しました。 Format32bppPBGRAなどを使用して、アルファモードをPremultipliedに設定してください。動作するはずです。

関連する問題