20

私は WPF で書かれた SEM 画像処理アプリケーションに取り組んでいます。Canvas から派生した画像表示コントロールがあります。これは、DrawingVisuals (「レイヤー」ごとに 1 つ) を使用して画像とオーバーレイを表示します。また、DrawingVisuals に適用されるスケールと変換変換を使用してズームとパンを実装します。

画像をズームインして個々のピクセルを表示すると、滑らかに表示されます。明らかにバイリニア フィルタリングを使用してビットマップを引き伸ばします (WPF は Direct3D を介してレンダリングされるため、驚くことではありません)。ただし、私の使用例では、Photoshop などの画像エディターでよくあるように、個々のピクセルをシャープなボックスとして表示したいと考えています。それが、私のアプリのユーザーが画像をズームする理由です->ピクセルレベルで操作できるようにします。

WPF にそのようなオプションはありますか (ビットマップを表示する前に手動で引き伸ばす以外に)? 何も見つかりませんでした。

前もって感謝します, Zbynek Vrastil チェコ共和国

4

2 に答える 2

22

Experts Exchangeの助けを借りて、ついに答えを見つけました。クラスRenderOptionsは、NearestNeighborに設定できる添付プロパティBitmapScalingModeを定義します。それで、

RenderOptions.SetBitmapScalingMode(imageDisplay, BitmapScalingMode.NearestNeighbor);

トリックを行います。

Zbynek Vrastil

于 2010-03-05T08:58:24.697 に答える
1

物事に緩衝材を置くのは嫌いですが、NearestNeighborGDI+ のように機能する場合、これは限定的な成功をもたらします。コントラストの高い領域で倍率を上げると、望ましい結果が得られない場合があります。GDI+ では、黒が青くなり、白が赤くなるのがわかります。ここでも、コントラストの高い領域を強調します。これが WPF に当てはまらない場合は、ラッキーだと思ってください。

おそらく、WCF 開発者はそれを確認できますか?

考慮すべきオプションが他にもあることがわかりましたが、GDI+Graphicsクラスについてのみ話すことができます。これは、誰かにとって役立つ可能性があります。

Graphics graph = e.Graphics;
graph.InterpolationMode = InterpolationMode.NearestNeighbor;
graph.CompositingQuality = CompositingQuality.AssumeLinear;
graph.SmoothingMode = SmoothingMode.None;

これは私にとってはうまくいきます。SmoothingModeがコツだと思います。これが他の誰かに役立つことを願っています。

于 2012-03-16T11:07:42.400 に答える