問題タブ [system.windows.media]
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.
c# - image .net 4.5 のカスタム描画部分
画面上に 2 つのズームイン画像を並べてカスタム描画しています。それぞれが画面の半分を占めています。
OnPaint() をオーバーライドして、.net 3.5 (と思います) で以前に実行しました。
DrawImage メソッドの説明: 「指定された Image の指定された部分を、指定された位置に指定されたサイズで描画します。」( MSDN )
.net 4.5 を使用して同じことを達成しようとしています。OnRender をオーバーライドし、DrawingContext オブジェクトを使用して描画を実行しています。基本的にこれは私のループです:
引き伸ばされた画像を表示したい場合は問題なく動作します。私が欲しいのは、(Window_LeftHalf と Window_RightHalf で) 画像の一部を (ズームインのように) 表示することです。基本的に、graphics.DrawImage (上を参照) が行うことですが、DrawingContext オブジェクトを使用します。
MSDN を見ようとしましたが、興味深いものを引き出すことができませんでした。後で DrawingContext によって使用されるバッファーを作成する可能性がありますか? ズームインされた画像を保持する中間オブジェクトが必要であることはほぼ確実です。何か案は?
更新:マウスを使用して画像をナビゲートしているため、パフォーマンスが重要です。例えば:
c# - Windows.Media.Drawing を BmpBitmapEncoder の黒い画像で保存する - アルファを削除するには?
SVG# ( http://sharpvectors.codeplex.com/ ) を使用して、SVG ファイルを他の形式にバッチ変換しています。変換される SVG 画像は、背景のない黒い線画です。私は WPF または System.Windows.Media 名前空間の経験がほとんどないため、これが基本的な質問である場合はご容赦ください。
私は SVG# の ImageSvgConverter の修正版を使用してい System.Windows.Media.Drawing
ます。これはオブジェクトを受け入れ、エンコーダー ( など) を使用して変換されSystem.Windows.Media
、目的のファイル形式にエクスポートされます。BmpBitmapEncoder
PngBitmapEncoder
を使用してエクスポートするとTiffBitmapEncoderor
、PngBitmapEncoder
またはGifBitmap
画像が期待どおりに生成されます。生成された画像はすべて透明な背景を持っています。
ただし、JpegBitmapEncoder
またはを使用してエクスポートするとBmpBitmapEncoder
、すべての画像が黒くなります。tif、png、gif はすべて透明な背景を持っているため、jpg / bmp 画像は正しく描画されていると思いますが、これらのファイル形式ではアルファがサポートされていないため、透明度が解釈されるため、出力を黒にすることは理にかなっています。何もない/黒として。
これは、これらの SO 投稿で説明されているとおりだと思います。BitmapSource からの奇妙な bmp 黒出力 - アイデアはありますか? 、透明な PNG を黒以外の背景色の JPG に変換し、ビットマップを保存すると背景が黒くなります - C# .
ただし、これらの投稿が私の問題に解決策を適用する方法がわかりません。誰かが私を正しい方向に向けることができますか?
DrawingContext の PushOpacityMask メソッドに白い SolidColorBrush を適用しようとしましたが、違いはありません。
本当にありがとうございました。
c# - リソースからロードされた DrawingBrush イメージの色をオーバーライドできますか?
リソースを作成せずに、リソース ファイルから作成したイメージの色を変更したい。私の現在の解決策は、必要な色で 2 番目の画像リソースを作成することです。しかし、私は自分のコードでそれを設定したいです。次のように画像をロードします。
新しい単色を設定できますか? Convert32 で、DrawingBrush または他の方法に設定しますか?
これが BitmapSourceFromBrush です ( Tim Lovell-Smithの功績):
wpf - ImageSource を効率的に更新する: BitmapImage と DrawingImage
with データ バインドGeometryModel3D
をDiffuseMaterial
使用した WPF コントロールがあります。ImageBrush
ImageSource
私の目標は、マウスをホバーしながら「断面」を表示することです。そのために、オブジェクトの適切な位置を取得できます。問題は次のとおりです。WPF には「3D ライン」がありません。
使用する画像に線を引くテストを行いましたがImageSource
、視覚的な結果はまさに私が望むものです。
したがって、次のことを行う予定です。ベース イメージを一度生成してから、その上に適切な線を描画し、使用するプロパティを として設定しますImageSource
。
私は2つのアプローチを検討しました:
タイプのバインドされた ImageSource を持っています
BitmapImage
。次にSystem.Drawing.Bitmap
、空白のテクスチャ (線なし) を使用して 1 回作成し、線の位置を変更するたびに、線のBitmapImage
描画をSystem.Drawing.Graphics
;で再作成します。タイプのバインドされた ImageSource を持っています
DrawingGroup
。次に、System.Windows.Media.ImageDrawing
一度作成し、線の位置を変更するたびに、1 つの線で構成されたものDrawingGroup
だけを変更して を再作成します。GeometryDrawing
ある方法が他の方法よりも固有の利点はありますか?
c# - Geometry の ScaleTransform 部分
だから私はスケーリングしたいチャートジオメトリを持っています。
ただし、グラフは特定の y 範囲で異なる方法でスケーリングされます。
これが私のy軸だとしましょう
70 ~ 100 の間の部分を、0 ~ 1 の間の部分と 1 ~ 70 の間の部分とは異なる方法でスケーリングする必要があります。特定の y 値の間の値にのみ適用される複数の scaletransforms を持つ TransformGroup を形成する方法はありますか?
ありがとう。
wpf - 高解像度の画像でWPF FormattedTextがランダムに消える
寸法が 25.5"x11" (レター ページの 3 倍) の 600 DPI の「三つ折り」画像を作成する必要があります。そのために、DrawingVisual、DrawingContext、および RenderTargetBitmap クラスを通じて WPF Imaging を使用しています。
たとえば、400 DPI 以下の低解像度で画像を生成すると、すべてのテキストが期待どおりに正しい位置に表示されます。ただし、画像の解像度を 500 DPI レベル以上に上げると、画像の右端に配置された特定のテキストが単純に消え、他の相対的に配置されたテキスト/図形は完全に印刷されます。それについての最もクレイジーな部分は、DPI を変更しようとすると、異なるテキストが表示/非表示になることです。あるテスト ケースでは、600 DPI では描画された FormattedTexts の 1 つのセットが欠落し、650 DPI では描画された FormattedTexts の別のセットが欠落し、700 DPI ではすべて正常に印刷されます。
以下のコード スニペットで問題を再現しました。そのまま (600 DPI) 実行すると、非常に大きな白い画像が表示されます。Dpi 定数を 400 以下に変更すると、テキストが問題なく印刷されます。
DrawingVisual クラス (VisualBitmapScalingMode、VisualTextRenderingMode、VisualEdgeMode など) 内の多くのノブを回してみましたが、役に立たなかったことに注意してください。これらの設定に関する私の調査のほとんどは、テキストが消えるのではなく、「あいまいな」テキストを修正するのに役立つ設定であることがわかりました。また、DrawingVisual または DrawingContext のガイドライン/スナップ設定のいずれについてもうまくいきませんでした。
この問題は Win7 と Win2008R2 の両方で再現されており、アプリケーションは .NET 4.5 を実行していることに注意してください。
何か案は?
c# - CompositeTransform.TranslateX が機能しない
canevasに写真を表示したい。canevas は写真よりも小さいので、以下の例のように写真を拡大縮小して中央に配置したいと考えています。
Stretch=UniformToFill
フレームに入っていない画像の部分(たとえば緑色の部分)をトリミングし、画像を移動できるようにする必要があるため、使用できません。(写真を移動することで、ユーザーは残したい写真の部分を選択できます)。それも理由で、renderTransform を使用できません。
プログラムで画像をスケーリングおよび変換しようとしています。この投稿に基づいてピンチ ツー ズームを実装しましたが、CompositeTransform アイテムを使用して変換を行いたいと考えています。
スケールは機能しますが、翻訳は機能しません。倍率の設定が何であれ、何も変わりません。
私が持っているものStretch=none
:
プログラムで取得したいもの:
これが私のコードです:
c# - 一連の点を回転させるために使用する式/関数
特定の 3d ベクトルを中心に一連の 3d ベクトルを回転させるために使用できる数式は何ですか?
サード パーティのライブラリであるMath.NET Iridiumを使用して回転を計算しようとしていますが、どの数式または数学的概念を使用すればよいかわかりません。ご覧のとおり、数学は私の得意分野ではないため、ライブラリが必要です。
System.Windows.Shapes.Polyline
PS: 標準を使用しようとしましたSystem.Windows.Media.RotateTransform
が、回転はレンダリング時にのみ適用されるようです (間違っている場合は修正してください)。を適用した直後に、回転した点の位置を知る必要がありますRotateTransform
。