Каждый раз, когда я поворачиваю свои изображения, моя системная память продолжает расти - PullRequest
0 голосов
/ 27 сентября 2019

Не уверен, что я схожу с ума, но у меня есть простой слайдер, который поворачивает изображение, , но каждый раз, когда я поворачиваю изображение, системная память продолжает расти , есть ли способочистить этот кеш, я чувствую, что делаю что-то не так.

    public partial class Rulercompass : Form
    {

        Image img;
        int angle;

        public Rulercompass()
        {
            InitializeComponent();
        }

        private void Rulercompass_Load(object sender, EventArgs e)
        {

            img = Image.FromFile(@"C:\teste.jpg");

        }

        private void Rulercompass_Paint(object sender, PaintEventArgs e)
        {
            Bitmap bit_map = new Bitmap(img.Width, img.Height);
            using(Graphics gfx = Graphics.FromImage(bit_map))
        {
            gfx.TranslateTransform(bit_map.Width / 2, bit_map.Height / 2);
            gfx.RotateTransform(angle);
            gfx.TranslateTransform(-bit_map.Width / 2, -bit_map.Height / 2);
            gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;

            gfx.DrawImage(img, 0, 0);
            e.Graphics.TranslateTransform(this.Width / 2, this.Height / 2);
            e.Graphics.DrawImage(bit_map, -bit_map.Width/2,-bit_map.Height/2);
         }
        }

        private void Rulercompass_Resize(object sender, EventArgs e)
        {
            Invalidate();
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            angle = trackBar1.Value;
            Invalidate();
        }
    }
}

1 Ответ

1 голос
/ 27 сентября 2019

Нашли решение, благодаря Ňɏssa Pøngjǣrdenlarp

private void Rulercompass_Paint(object sender, PaintEventArgs e)
{
    Bitmap bit_map = new Bitmap(img.Width, img.Height);
    using (Graphics gfx = Graphics.FromImage(bit_map))
    {
        gfx.TranslateTransform(bit_map.Width / 2, bit_map.Height / 2);
        gfx.RotateTransform(angle);
        gfx.TranslateTransform(-bit_map.Width / 2, -bit_map.Height / 2);
        gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;

        gfx.DrawImage(img, 0, 0);
        e.Graphics.TranslateTransform(this.Width / 2, this.Height / 2);
        e.Graphics.DrawImage(bit_map, -bit_map.Width / 2, -bit_map.Height / 2);
    }
    bit_map.Dispose();// after using dispose this is what was missing
}
...