問題タブ [drawingvisual]

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 投票する
0 に答える
753 参照

wpf - WPF DrawingVisual でのイメージソースのトリミング

DrawingVisual 内の画像ソースのトリミングされた領域を表示する必要がありますが、過去数時間、単純なタスクの空白を描画していました。

私の計画は、さまざまなフレームを含む大きな画像を取得する (HMI システム用の) 時間指定アニメーションを実装することです。状態変数に応じて、DrawingVisual はこの大きな画像から現在のフレームを抽出して表示するため、トリミングが必要になります。

私のコードは次のとおりです。

ただし、トリミングされた画像を作成すると、

「値が想定範囲内にありません」

ところで、画像はリソースディクショナリ内(現在のアセンブリ内)にロードされたpngです

(ImageSource)FindResource("... を使用して DrawingVisual に割り当てられます。

第一に、私はエラーメッセージを理解できず、満足のいく説明がどこにも見つかりません.第二に、なぜ単純なタスクを実行するのがとても難しいのですか?

助けてくれてありがとう。

psこれは、リソースを見つけることができないためだと思います。しかし、元のイメージソースに問題がない場合、クローン バージョンの動作が異なるのはなぜでしょうか? pps 行「bm.BaseUri = ...」を削除すると、同じエラーが発生します。

簡単にするために、クリックするとCroppedBitmapを作成しようとするボタンのみを持つテストプロジェクトを作成しました。

ボタンクリック=

リソース ディクショナリはビットマップを参照します。

App.xamlが含まれています

BitmapSource (i) は有効で、CroppedBitmap への呼び出しは ArgumentException、「値が許容範囲内にありません」をスローします。

トリミングされた画像を作成する、または作成しようとすることは、これよりも簡単ではありませんか?

私がMSDNから取った別の例

再び、新しい CroppedBitmap が InvalidArgument exceptionin をスローします

何かご意見は?

ありがとう

0 投票する
0 に答える
234 参照

wpf - WPFキャンバス、フレームワーク要素に赤い境界線があります

キャンバスを使用して、さまざまなフレームワーク要素をホストしています。各フレームワーク要素自体が DrawingVisual のホストです。

設計時に追加された各フレームワーク要素は、実行時にキャンバスに正常に (つまり、期待どおりに) 表示されます。

実行時に追加されたフレームワーク要素 (canvas.children.add(new myframework...)) については、すべて赤い境界線があります。この境界線を絶対に描いていないという事実を強調します。すべての描画命令とまだ赤い境界線が各コントロールを囲んでいます. 描画命令を再導入すると、この赤い境界線が描画の上に表示されるため、WPF が行っているように見えます.

関連する XAML はありません。これは単に Canvas をホストする UserControl であり、フレームワーク要素が追加されるのはこの Canvas です。コントロールはすべてキャンバスの境界内に含まれており、重なっていません。

誰かがこの境界線が表示される理由とそれを取り除く方法を説明できますか.

ありがとう

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

c# - VisualCollection と UIElements の両方を表示する

VisualCollection を使用して、WPF の Canvas にカスタム DrawingVisuals を表示しています。また、キャンバスにいくつかの UIElements を表示する必要があります。問題は、VisualCollection を使用すると、キャンバスが通常の子を無視するように見えることです。UIElements は、VC に配置しても表示されません。

UIElements を DrawingVisuals の上にレンダリングしたいので、DV を AdornerLayer に配置できません (?)。何か案は?

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

c# - DrawingVisual で描画するローカル クラスのプロパティを変更する

Drawingから派生するクラスを定義しましたFrameworkElement。これを使って上に描画していDrawingVisualます。私XAMLはこのローカルクラスを含めました。

ここで私の質問は、このクラスのプロパティを変数にバインドする方法、またはそれらを変更する方法です。

たとえば、widthプロパティを変更したいとしましょう。に を含めてButtonXAML変更しようとしましたwidthが、何も起こりません。

必要なコードはすべて以下のとおりです。

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

c# - DrawingVisual のビットマップ キャッシュにぼやけた部分がある

DrawingVisuals最近、傾向グラフ (特にズームとパン) のパフォーマンスを向上させるために切り替えました。

ここに私が持っているコードがあります:

これは次のImprovedDrawingVisualとおりです。

さて、ジオメトリには がありますがTransforms、これは重要かもしれません。

何が起こるかというと、ビットマップ キャッシュ (1 ピクセルの行) なしでグラフがきれいに描画されますが、ビットマップ キャッシュを有効にすると、グラフの一部がすべてぼやけてしまうことがあります。

ぼやけた線

これを修正する方法を知っている人はいますか?の設定を変更したり、設定をオフにしたりしてみRenderAtScaleましDrawingVisualEdgeModeが、解決しません。

編集:ここでは関係ないため、混乱を避けるためにブラシ塗りつぶしジオメトリを省略しました。

0 投票する
0 に答える
138 参照

c# - キャンバスを目的のキャンバス サイズに対してのみ BMP に保存する

キャンバスにさまざまなオブジェクトがあり、移動できます..

次に、キャンバスをBMPまたはPNGに保存したい..問題なく動作します。

ただし、キャンバスの外側にオブジェクトがある場合、出力画像は目的のキャンバス サイズになりますが、外側の要素内に収まります。

希望のサイズを正確に印刷したい.. :)

私はそれが対策と配置の問題だと思うが、それがどのように機能するかを理解していない..

コードと「悪い画像エクスポート」のサンプル画像に従ってください!

縦の白い線の右側にあるものはすべて写真に写らないでください。

ここに画像の説明を入力

0 投票する
0 に答える
737 参照

.net - WPF での線の描画 - DrawingVisual パフォーマンスの問題

2 つのバージョンの線描画コードを実装しました。1 つは WPF 図形 (線) を使用し、もう 1 つは StreamGeometry と DrawingVisual を使用します。

DrawingVisual の方が高速である必要がありますが、正反対のことがわかりました。DrawingVisual オブジェクトを含むホスト ウィンドウの最初の描画とその後のサイズ変更は、WPF の行の例よりもはるかに遅く、ぎくしゃくしています。

私は何を間違っていますか?

WPF 行コード:

DrawingVisual コード:

描画ビジュアル ホスト コントロール:

VisualHost をグリッドに割り当てる:

0 投票する
0 に答える
1024 参照

c# - RenderTargetBitmap : ハンドルを解放/破棄できません

私の悪い英語でごめんなさい。

DrawingVisual をビットマップにレンダリングして、DiffuseMaterial を作成したいと考えています。私はこれをします:

しかし...

  • メソッド GetDiffuseMaterial を 10000 回使用すると、アプリケーションが停止します。すべてのアプリケーションは最大 10000 個の GDI ハンドルを持つことができ、RenderTargetBitmap は作成されるたびに 1 つの GDI ハンドルを使用するため、これは「正常」です。
  • これを回避するには、RenderTargetBitmap オブジェクトを解放します。しかし、私はそれをすることができませんでした。私はこれを試しました( mat.Freeze() と return mat; の間):

    /li>
  • もう 1 つの方法は、RenderTargetBitmap を 1 つだけ用意し、それをパラメーターとして GetDiffuseMaterial に渡すことです。
    しかし、GetDiffuseMaterial を 2 回呼び出すと、ハンドルが共有され、マテリアルが最後の変更を取得するため、2 つの同一のマテリアルが作成されます。(したがって、テキスト パラメータが同じでなくても!)

RenderTargetBitmap でやりたいことを行う別の方法がわかりません。
注意: GetDiffuseMaterial は 100 万回呼び出すことができます...

RenderTargetBitmap は、文字列テキストから DiffuseMaterial を作成するために私が見つけた最速の方法です。VisualBrush を TextBlock で使用する、DrawingBrush を使用するなど、他のテクニックは非常に遅いです。

ご協力ありがとうございました。

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

c# - DrawingVisualでピクセルではなくミリメートル単位で何かを描くには?

何かをaで描こうとしているのですSystem.Windows.Media.DrawingVisualが、ミリ単位で細く描く必要があります。どうやってやるの?