問題タブ [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 投票する
2 に答える
3071 参照

transparency - direct2D ID2D1BitmapRenderTarget への GDI レンダリングは常に透過的です

ムービー レンダリング ソフトウェアを DirectDraw から Direct2D に移植したいと考えています。互換性の問題のため、GDI レンダリングは画像の上で行う必要があります。パフォーマンスを最適化するために、何らかのバックバッファ メカニズムを実装したいと考えていますが、アルファ チャネル情報に問題があるようです。すべての GDI 描画は何らかの形で透明に見えます

ウィンドウ ハンドル用のID2D1HwndRenderTargetと、イメージのコピー先の ID2D1Bitmap を作成します。ビットマップのピクセル形式はDXGI_FORMAT_B8G8R8A8_UNORMで、アルファ モードはD2D1_ALPHA_MODE_IGNOREです。HwdRenderTarget は GDI と互換性があるため、レンダリング関数は次のようになります。

このバージョンは問題なく動作します。GDI オブジェクトは単色で描画され、DrawTextEx-Text の背景は透明です。

パフォーマンスを最適化するために、「バックバッファー」で GDI 描画を実行したいので、何かが変更されたときにのみ実行する必要があります。それ以外の場合は、キャッシュされたビットマップをレンダリングできます。ビットマップは空で透明なので、描画されたオブジェクトだけが表示されます。

だから私は CompatibleRenderTarget ID2D1BitmapRenderTargetを作成し、アルファモードはD2D1_ALPHA_MODE_PREMULTIPLIEDです:

次に、CompatibleRenderTarget で GDI レンダリングを行います。

私のレンダー関数は次のようになります。

問題は、すべての GDI 描画が何とか透明であり、透明度が下にある画像ピクセルの値に依存することです。暗いテキストは、暗い画像の背景では暗く表示されますが、白い背景では白くなります。ただし、アルファ チャネルは GDI では使用されず、myBitmap にもアルファ情報はありません。

では、アルファ情報はどこから来るのでしょうか? 誰にもアイデアがありますか?前もって感謝します!

ちなみに、CompatibleRenderTarget で Direct2D 描画を使用しても問題なく動作します。

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

c++ - Win32/Direct2D - 無限スクロール リストボックスをレンダリングする方法

Twitter からの比較的単純な項目のリストを表示する必要がある C++ を使用して Win32 アプリケーションを構築しています。リスト内の各項目には、いくつかのアイコンに沿って作成者とつぶやきのテキストが含まれます。OS X 上の Twitter クライアントのラインに沿ったスムーズなスクロールと加速があればいいのですが (おそらく Core Animation を使用して行われます)。Windows 7 のみをサポートする必要があります。

多くのアイテムを許可するために仮想化された、ある種の所有者描画リストボックスを作成する必要があると想定しています。似たようなことをする例がいくつかありますか?

Direct2D や DirectWrite を使おうと考えているのですが、制御開発には向いていないようです。これらの新しいテクノロジでは、各アイテムのレンダリングを担当するため、ヒット テストを実装する必要があり、リストをスクロールするための物理学も解決する必要があると思います。これを研究し続けるのは正気ですか?所有者が描画した Win32 コントロールの代わりとして Direct2D の例を入手した人はいますか?

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

c++ - Direct2D-画面に何も描画されていません。C++で配列を処理する方法に問題があります。

みなさん、こんにちは。見てくれてありがとう。これは、ここに投稿された元の質問のフォローアップです。

このように定義した基本クラスがあります。

このクラスを拡張する2つのクラスがありますが、どちらも似ているので、次の1つをリストします。

DrawShape関数は次のように実装されます。

画面に乱数の楕円と長方形を描画したいので、最初にそれらの乱数を見つけて、そのサイズのDrawableShapeの配列を作成し(C ++ではオブジェクトを動的に割り当てることができないため)、親オブジェクトを次のように置き換えます。子オブジェクトを作成し、配列で描画関数を再度ランダムに呼び出します。私のコードは次のようになります。

それはうまくいくはずですが、うまくいきません。また、これを書き留めた後、ある種のinit関数で配列を作成し、OnRender関数で配列の描画を呼び出す方がよいことに気付きました。助けてください!!


編集:さて、私はポインターで動作する形状を持っています、問題は配列の構築です。だから私はこのようなものを持っています:

それはそれ自体でうまくいくようです。スライスせずにDrawableShapeの配列を作成するにはどうすればよいですか?

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

directx - Directx10: MSAA の最大テクスチャ サイズ?

DirectX 10 で、特定のサンプル カウント/品質の MSAA テクスチャの最大テクスチャ サイズを確認するにはどうすればよいですか?

Direct2D レンダリングを使用して Direct3D MSAA サーフェスにジオメトリをレンダリングしようとしていますが、大きなテクスチャ (~5000x2500) の場合、奇妙な結果が得られます。MSAA のサンプル数を 8 から 4 に減らすと、すべて正常にレンダリングされます。テクスチャの作成時またはレンダリング時にエラーは発生しません。

ありがとう!

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

c# - C#でのスムーズなビデオレンダリング

MediaElementよりもCPU使用率が低いWPFでビデオをレンダリングする方法を見つけようとしています。目標は、C++プログラミングでのDirect3D/ DirectDrawビデオレンダリングと同じくらい、スムーズで低CPUのビデオ再生です。

Direct2D(WindowsAPICodePackを使用)でビデオをレンダリングしようとすると、CPU使用率がかなり低くなりますが、C ++のDirectXのように正確な時間にビデオを更新する正確なタイマーがないため、ビデオをスムーズにレンダリングする方法がないという問題があります。

たぶん、Direct3Dをネイティブに使用し、C#WPFウィンドウのDirectXウィンドウでC ++をホストするには、C++の世界に戻る必要があります。どうなるかわかりませんが、やってみる価値はあると思います。

何かアドバイスがあれば教えてください。

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

colors - Direct2D での色の減衰/色合い

Direct2D でレンダリングするときにビットマップの色を変更する方法を知っている人はいますか? Direct3D では、さまざまな頂点の色を指定するか、スプライト バッチを使用する場合は色を指定するだけです。Direct2D を使用してこれを行いたいと思います。助けてくれてありがとう。

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

direct2d - Direct2D の共有可能なリソースを再作成する必要はありますか?

ドキュメントによると、デバイスに依存するリソースであっても、レンダー ターゲットがいくつかの条件を満たしていれば、レンダー ターゲット間で共有できます。

これらの条件を満たす 2 つの RenderTargets (RT1 & RT2) があるとします。RT1 を使用して新しいデバイス依存リソース (ResourceA) を作成し、RT1 ​​と RT2 の両方がこのリソースを使用して描画を行います。

RT1 の処理が完了すると、D2DERR_RECREATE_TARGET が返されます。これは、RT1 ​​を再作成して再度描画する必要があることを意味します。

私の質問は、RT1 ​​によって作成された ResourceA を再作成する必要があるかどうかです。

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

c# - Direct2Dでは選択/ピッキングはどのように機能するはずですか?

パフォーマンス上の理由から、C#アプリケーションをGDI +からDirect2D(C ++ / CLIラッパー)に移動したいと思います。しかし、ピッキング部分を解決する方法がわかりません。動き回れる形や画像がいくつかあります。現在、ほとんどの場合、GraphicsPath.IsVisibleを使用しています。Direct2Dで同等のものが何であるか知っていますか?

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

c++ - Directwrite: フォントの高さを取得する

私の目的: 特定の高さの IDWriteTextLayout に収まるテキストの行数を計算できるように、IDWriteTextFormat のフォントの高さを取得したいと考えています。

私の問題: 現在、このコードを使用して表示可能な行数を計算しています:

計算は一部のフォントでは正確であるように見えますが、TrueType フォント (例: Courier New、Arial、Times New Roman) では正確ではありません。これらのフォントの場合、表示されるテキストは、レンダー ターゲットの垂直方向の境界線よりもかなり手前で切り取られます。

いくつかのコンテキスト: IDWriteTextLayout を使用してテキストをコントロールのレンダー ターゲットに配置するテキスト スクロール バック バッファー コントロールを作成しています。GetVisLines() の結果を使用して、(行ごとに std::strings にテキストを格納する) 循環バッファーから何行のテキストをレイアウトに取り込み、ウィンドウがスクロールまたはサイズ変更されるたびに再作成するかを決定します。

これは、「ネイティブ」Win32 API C++ を使用して行われています。

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

delphi - Direct2D キャンバスを TcxImage Canvas に描画するにはどうすればよいですか?

GridPatternBitmapBrush を作成し、ペイント メソッドで TForm にグリッド パターンを描画する Direct2D デモがあります。Direct2D GridPatternBitmapBrush をフォームの代わりに TcxImage.Canvas( DeveloperExpress TImage) に表示するにはどうすればよいですか?