次の画像を検討すると、32x32のサイズのかなり基本的なアイコンです。テスト中に四隅を無地で塗りつぶしましたが、アイコンの周りは透明な長方形です。
ここで、このコードを考えてみましょう。このコードは、画像を単純に描画しますが、より大きなスケールで描画します。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
e.Graphics.DrawImage(Properties.Resources.icon_32a, new RectangleF(0, 0, 512, 512), new RectangleF(0, 0, 32, 32), GraphicsUnit.Pixel);
}
私は完全な画像を描画しており、それをトリミングしようとはしておらず、拡大するだけであることに注意してください。
最後に、これはテストで得られる出力です。
問題に気づきましたか?上の行と左の列のピクセルの半分が消えました。次に、この上にグリッドをオーバーレイしようとすると、グリッドが正しく配置されているため、かなりひどいように見えますが、画像はそうではありません。サイズを2倍の64にしただけでも、64はこの最初の行/列の切り抜きを導入します。
また、0,0より前に描画されている場合に備えて、宛先の長方形をオフセットしようとしましたが、そうではありませんでした。
また、さまざまな補間モードを試してみましたが、ブレを引き起こす頭痛の種からわかる限り、ピクセルはまだトリミングされていたので、補間モードによるものではないと思います。
また、さまざまなグラフィックモードを使用しようとしましたが、役に立たなかったという事実を除けば、とにかくピクセルに固執する必要があります。
好奇心から96dpiの画像の新しいコピーで再試行しましたが、同じ効果が得られたので、ソース画像の解像度ではないと思います。
ストローで握りしめたり、Rectangle
代わりに使用したりしRectangleF
ても効果はありませんでした。
なぜこの見かけの作物が発生しているのかについて、誰かが手がかりを提供できますか?
ありがとう;