none
Что делать если PictureBox срезает у маленьких картинок по пол пикселя сверху и слева? RRS feed

  • Вопрос

  • Это происходит в режимах PictureBoxSizeMode.StretchImage и PictureBoxSizeMode.Zoom.

    Вот код для проверки:

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace TestPictureBox
    {
        public partial class Form1 : Form
        {
            private SharpPictureBox sharpPictureBox;
            private Bitmap bitmap;
    
            public Form1()
            {
                InitializeComponent();
    
                sharpPictureBox = new SharpPictureBox()
                {
                    Dock = DockStyle.Fill,
                    SizeMode = PictureBoxSizeMode.Zoom
                };
    
                Controls.Add(sharpPictureBox);
    
                bitmap = new Bitmap(5, 5);
    
                for (int y = 0; y < bitmap.Height; y++)
                    for (int x = 0; x < bitmap.Width; x++)
                        if (x == y)
                            bitmap.SetPixel(x, y, Color.Red);
                        else
                            bitmap.SetPixel(x, y, Color.White);
    
                sharpPictureBox.Image = bitmap;
            }
        }
    
        class SharpPictureBox : PictureBox
        {
            //Это для Sharp Image
            protected override void OnPaint(PaintEventArgs pe)
            {
                pe.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
                pe.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
                pe.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
                base.OnPaint(pe);
            }
        }
    }


    • Изменено Dimasikkk 10 января 2020 г. 5:37
    10 января 2020 г. 5:30

Ответы