問題タブ [direct2d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
16428 参照

c++ - GDI と Direct2D の比較

現在、シミュレーションをプログラミングしており、GDI を使用するアプリケーションから Direct2D を使用するアプリケーションに移植したいと考えています。しかし、Direct2D コードは GDI コードよりもはるかに遅いです。

画面上にたくさんの楕円をレンダリングします。私の GDI アプリケーションでは、メモリ デバイス コンテキストに描画し、BitBlt を使用して Windows デバイス コンテキストに描画します。Direct2D では、ID2D1HwndRenderTarget に描画します。

私の問題は、GDI を使用すると、400 以上の楕円を簡単に描画でき、それでも 400 FPS を維持できることです。Direct2D で同じ数の楕円を実行すると、FPS が 30FPS まで低下します。

すでにアンチエイリアスをオフにしていますが、あまり役に立ちません。興味深いことに、いくつかの楕円を描くだけでも、GDI よりも Direct2D の方が高速です。Direct2D のパフォーマンスを向上させるためにできることはありますか? または、アプリケーションで GDI を使用し続ける必要がありますか?

GDIを使用した私の描画コードは次のとおりです。

Begin 関数と End 関数の間に、標準的な GDI の方法で楕円を描画します。

Direct2D を使用した begin 関数と end 関数は次のとおりです。

Direct2D インターフェイスをセットアップする方法を次に示します。それはすべてクラスにラップされています。そのため、完全なコードを投稿することはできません:

前もって感謝します。

0 投票する
2 に答える
660 参照

c++ - MFC & Kinect: Kinect の画像に線を引く

現在、Kinect を使用しています。Kinect の VGA イメージにスケルトンのボーンを描画したいと考えています。まず、kinect から画像を取得します。

ここではそれをNUI_LOCKED_RECTに入れているので、それを使って何でもできます。最も一般的な方法は、ビットマップに変換して画面に表示することですが、画像にいくつかの変更を加えたいと考えています。Direct2D を使用して画面に表示するので、ID2D1Bitmap に変換できる画像形式が必要で、線や点を描画できる必要があります。どのようなイメージが必要ですか?

0 投票する
1 に答える
456 参照

graphics - DirectXの描画領域を制限する

Direct2Dを使用してカスタムチャートを描画しています。チャートには、チャートの側面にx軸とy軸のラベルが描かれています。グラフを垂直方向にズームすると、一部のデータがx軸ラベルの上に描画され、軸ラベルを常にクリーンに保ちたいと思います。コントロール全体ではなく、ペイント領域をカスタムの長方形に制限する最良の方法は何ですか?

私の頭の中にはいくつかのアイデアがありますが、これを行うためのより良い方法があるかどうかはわかりません。

方法1)

GDIスタイルに移動し、1つのパネルにチャート領域をペイントし、別のパネルに軸ラベルをペイントします。このように、チャートパネルにペイントするときに、軸ラベルを台無しにすることはできませんでした。問題は、より多くのDirect2Dオブジェクトを作成する必要があることです(少なくとも各コントロール(hWnd)に対してターゲットをレンダリングする)。これを行うと、パフォーマンスへの影響がわかりません。

方法2)

軸ラベルが更新されるたびにビットマップにコピーし、チャートパネルコマンドの後にこれらのビットマップをコントロールの上に描画します。これは方法1よりも安いですか?

方法3)

すべての描画操作でピクセルの位置を手動で確認し、必要に応じて変更します。これは最悪の選択肢のようです。

編集:

方法4)

方法1)と同じですが、GDI +を使用して軸ラベルをペイントし、チャートにのみDirect2Dを使用します。

方法5)

ID2DLayerを使用します。この機能はMSDNドキュメントから見つけました。それは私が探しているもののようですが、頻繁に使用するとパフォーマンスへの影響について多くの警告が表示されました。

あなたの意見?

0 投票する
1 に答える
1506 参照

c++ - C++ Direct 2D ID2D1Bitmap のサイズを変更する方法

私は自分が作成しているゲーム用の単純な GUI ライブラリを作成しています。各コントロールには、コントロールの再描画が必要なときに描画するビットマップが必要です。再描画する必要がない場合は、既に作成されたビットマップを画面に表示する準備ができています。コントロールはサイズ変更できるため、この Bitmap もサイズ変更して、コントロールを適切に完全に描画できるようにする必要があります。サイズを変更できる ID2D1HwndRenderTarget とは異なり、ビットマップのサイズを変更する Resize メソッドではないように見えるので、どうすればこれを実現できますか?

0 投票する
1 に答える
322 参照

directx - 白が透明な ID2D1Bitmap をレンダリングする方法

こんにちは、ファイルリーダーのようなものを書いています。この機能の 1 つは、画像を読み取ることです。一部の画像は JPG 形式です。この画像は、透明であるべき領域が白くなっています (jpg はアルファチャンネルをサポートしていないため)。言い換えれば、白があるところが透明になるように、Direct2d イメージでレンダリングする必要があります。助言がありますか?ありがとうPrzemek

0 投票する
2 に答える
1327 参照

c++ - ボタンコントロールでのPNGの使用

ダイアログボックス(Visual Studio 2010 Professional)のボタンコントロールでPNGをレンダリングしようとしています。いくつかの調査を行った後、私はBMPファイルに対して機能する次の方法を見つけました。

ただし、これはPNGファイルでは機能しません。さらに調査した結果、GDI+を使用してこれを行う簡単な方法があることがわかりました。

プログラムの他の場所ではGDI+を使用していませんが、この単純なタスクを実行するために、ヘッダーを含め、ライブラリにリンクして初期化する必要があります。このトラブルのすべての価値がありますか?これを行うためのより標準的な方法はありますか?

1つのボタンで複数のPNG(一部は透明)をレンダリングする予定です。

編集:HBITMAPの作成に使用している(わずかに変更された)CreateDIBSectionFromBitmapSource()関数は、次の場所にあります。

http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=win7wicsamples&DownloadId=7549

0 投票する
1 に答える
180 参照

scroll - Direct2D が Graphics3D として設定されている場合、TeeChart スクローラーが RedCross エラーを引き起こす

私は TeeChart .Net コンポーネントを試しており、財務チャートに焦点を当てています。PageScroller ツールを使用してグラフのスクロールを管理しようとすると、GDI ではうまく機能しますが、D2D レンダリングを設定すると赤い十字が表示されます。

それが既知の問題なのか、それともこのコードで何か間違ったことをしているのか、誰かが知っていますか?

ページャーを追加する方法は次のとおりです。

これがD2D Drawingの設定方法です(ページャーがチャートにない場合は正常に機能します)

ベスト、サルヴァトーレ・ロッシット。

0 投票する
1 に答える
806 参照

gpu - ID2D1DCRenderTarget と ID2D1HwndRenderTarget の比較

一部の GDI/GDI+ コードを Direct2D に移植しようとしていますが、どちらのタイプのターゲット (DC または Hwnd) を使用するのが適切かについてまだ少し混乱しています。 GPU。特に、次の問題が見つかりました。

DCRenderTarget を使用すると、ハードウェア アクセラレーション (またはデフォルト) を使用できません。これは、メモリの保護領域の違反が続いているためです。HwndRenderTarget を使用すると、これは発生しません。

HwndRenderTarget を使用する場合、通常はすべて問題ありませんが、ウィンドウ (ボタンなど) が多数ある場合、KeyPressed メッセージを認識しないメイン ウィンドウへのフォーカスが失われ、Gpu を使用するとパフォーマンスが低下します。多く、アクティブなターゲットの数に大きく依存します (ソフトウェア アクセラレーションを使用している場合は発生しません)。

誰かが同じ問題に遭遇しましたか? それについて何かお勧めできますか?

どうもありがとう!

0 投票する
2 に答える
801 参照

c++ - Direct2D アプリケーションでの HRESULT の処理

Kenny Kerr は、msdn マガジンのイメージングと Direct2D に関する記事で、頻繁にHR()マクロを使用しています。

彼の Windows Imaging Component の記事 - http://msdn.microsoft.com/en-gb/magazine/cc500647.aspx

彼は書く -

最後に、WIC API は HRESULT を使用してエラーを記述します。この記事のサンプルでは、​​HR マクロを使用して、確認が必要な HRESULT をメソッドが返す場所を明確に識別しています。これは、例外をスローするか、HRESULT を自分で返すかに関係なく、独自のエラー処理戦略に置き換えることができます。

しかし、ケニーは の定義を示していませんHR()。私は C++ の初心者で、コードの詳細を発見して理解しようとしています。私のプログラムでHR()を処理する最善の方法を検討できるように、彼の実装が何であるかを知りたいです。HRESULT定義を検索しましたが、これらの特定の記事のソース コードはないようです。

私について学んでいる間、マクロの代わりに関数macrosの使用を提案するこれらの最近のドキュメントに出くわしました-inline

http://msdn.microsoft.com/en-us/library/vstudio/ttsbh614.aspx

http://msdn.microsoft.com/en-us/library/vstudio/z8y1yy88.aspx

HR()ケニーが彼のマクロをどのように定義しているか誰か教えてもらえますか? そして、それは実際に何をしますか?

Direct2D プログラムは s をどのように処理する必要がありHRESULTますか? HRESULTプログラムの信頼性と回復力を高めるために、s を適切に使用する方法は何ですか?

0 投票する
1 に答える
855 参照

mfc - Direct2D を使用した透過ウィンドウ

MFC アプリケーションがあり、Direct2D を使用してカスタム コントロールを描画したいと考えています。

コントロールを透明にする必要があります。OnEraseBkgnd を上書きしてafxGlobalData.DrawParentBackground.

Direct2D では、ID2D1HwndRenderTarget を使用し、BeginDraw/EndDrawOnPaing メソッドから呼び出しています。問題は、このメソッドは、描画/クリア関数を呼び出さなくても、領域全体を黒くクリアすることです。

Direct2D で透明な画像の上に描画する方法はありますか?

ありがとう!