5

幅1px、高さのある画像があります。OnPaintイベントのコントロールの幅全体にこの画像を描画する必要があります。私はそれを描くことができますが、正しくありません。引き伸ばすと、実際にはすべてのピクセルが塗りつぶされるわけではないようです。補間がオフになっているかのように。「賢くなるのをやめて、すでに描いてください」と言う方法はありますか?グラフィックオブジェクトのオプションにInterpolationMode.Offまたは.Noneが表示されません。

Xがコントロールと同じ幅である幅Xの画像を使用して、実際に全幅を描画していることを確認できます。その後、描画すると、通常どおり全領域をカバーします。ただし、このコントロールは常にサイズ変更されており、メモリと1px幅の画像を使用するすべてのジャズを節約することはWebの世界ではごく普通のことです。ただし、これはデスクトップC#アプリケーション用です。これを修正する方法について何かアイデアはありますか?

4

2 に答える 2

13

わかりました、私は魔法のキーワードを理解しました:

g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;

これは、補間モードをNearestNeighbourに設定することと相まって、完全なブロックを描画することを可能にします。

補間モードを設定しないと、奇妙なブレンドが発生します(予想)。PixelOffsetModeを設定しない場合、最近傍アルゴリズムには、空白のペイントで比較するネイバーがないため、画像の半分、幅の半分しか描画されません。オフセットを半分に設定すると、すべてが-0.5px移動し、このアルゴリズムがブロックテクスチャで機能するようになります。

于 2010-12-13T18:03:32.660 に答える
0

InterpolationMode.NearestNeighborは、この場合に使用するものです。

于 2010-12-10T20:42:35.183 に答える