私は現在、さまざまな画像を描画している途中にpictureBoxがあるWindowsフォームアプリを持っています。すべての画像が正確に 25% 拡大されていることを除けば、画像は正常に描画されています。また、PaintEventArgs を使用してグラフィックス デバイスを取得し、Paint メソッド内ですべてを描画していることも付け加えておく必要があります。
SizeMode が Normal に設定されていることを確認し、グラフィック オブジェクトのスケール ファクターが 1 であること、ペイント メソッドに渡すすべての画像オブジェクトが本来あるべきサイズであることを何度も確認しましたが、描画されるとそれらは異なるサイズです。
私は今まで g.drawImage(image, Rectangle) を呼び出して、イメージの幅と高さを Rectangle の幅と高さとして渡して、正しいサイズで強制的に描画されるようにしてきましたが、これはすべきだと思います短期的な修正であり、単純なものを見落としています。
事前に感謝します。
コードは次のとおりです (重要なビットのみ)。
public class Level : PictureBox
{
...
private Image image;
...
public Level(TabPage parent, Panel propertiesPanel, ItemManager items, string levelName)
{
...
image = Image.FromFile(@"Levels/" + levelName);
Size = image.Size;
SizeMode = PictureBoxSizeMode.Normal;
MouseClick += new MouseEventHandler(level_MouseClick);
MouseMove += new MouseEventHandler(level_MouseMove);
Paint += new PaintEventHandler(level_Paint);
Invalidate();
}
private void level_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//With the rectangle fix (drawing to correct size)
g.DrawImage(image, new Rectangle(0, 0, image.Size.Width, image.Size.Height));
////Without the fix (as i thought it should be be this is where it scales it)
//g.DrawImage(image, new Point(0, 0));
drawPlacedItems(g);
drawItemPreview(g);
}