2017-11-21 28 views
0

レンダーターゲットからSharpdx Direct2D1ビットマップを取得しました。私はそれをイメージとしてファイルに保存したいです。これはテスト目的です。私はそれがWICビットマップが必要かどうか、またはこれらのビットマップをどのように変換するかはわかりません。または最初にWICビットマップを受け取る方法。SharpDxビットマップをファイルに保存する

また、このビットマップを一般的なファイルに保存する方法を簡単に見つけることができません。

助けが必要です。

編集:私は今、このアプローチを使用してい

http://www.rolandk.de/wp/2013/06/inhalt-der-rendertarget-textur-in-ein-bitmap-kopieren/

それはドイツ語であるが、彼が何を言うことはあなたがレンダーターゲット のリソースをコピーする必要があること、ですCPUを介してアクセスするためのリソースをステージングします。次に、内容をビットマップにコピーします。

私は最後にbitmap.Save(filename)を使用してこのアプローチを試しています。しかし、何とかビットマップは空のままです。たぶん私はファイルを正しくエンコードすることができません。しかし、私はバックバッファーターゲットからのデータをまったく取得しないように思えます。

答えて

0

質問は、あなたがwicBitmapを持っていればDanBysrömによって答えられ、gdiビットマップにデータをコピーするだけです。

私は編集部分に投稿したリンクで私の特定の問題を解決しました。最初は私の問題のために全く間違ったアプローチだったかもしれないので、私は賢明なものや何も使っていませんでした。

edit部分で発生した問題は、CopyResource(...)ではなくCopySubResource(...)で、代わりにdefaultパラメータで解決されました。私はなぜCopyResource(...)がうまくいかなかったのか分かりません。

2

あなたがWicBitmapであなたのイメージを持っている場合には、GDI +ビットマップに移動し、そこからそれを保存することは非常に簡単です:

var pixelData = new byte[width*height*4]; 
    wicBitmap.CopyPixels(pixelData, width*4); 
    var bmp = new System.Drawing.Bitmap(width, height); 
    var bd = bmp.LockBits(new System.Drawing.Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, 
     System.Drawing.Imaging.PixelFormat.Format32bppPArgb); 
    Marshal.Copy(pixelData, 0, bd.Scan0, pixelData.Length); 
    bmp.UnlockBits(bd); 

かないことがありますが、これを解決するためのより良い方法があるかもしれません。しかし、これは私が成功したものです。

関連する問題