Я пишу курсовую по работе с графикой, и моё приложение не может открывать картинки с большим разрешением

вероятно это из-за недостатка памяти, помогите оптимизировать

`

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void newPictureToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            var bitmap = new Bitmap(openFileDialog1.FileName);
            var pixels = GetPixels(bitmap);
            Graphics g = pictureBox1.CreateGraphics();
            for (int i = 0; i < bitmap.Width*bitmap.Height; i++)
            {
                SolidBrush colorbrush = new SolidBrush(pixels[i].Color);
                g.FillRectangle(colorbrush, pixels[i].Point.X, pixels[i].Point.Y, 1, 1);
            }
        }
        List<Pixel> GetPixels(Bitmap bitmap)
        {
            var pixels = new List<Pixel>(bitmap.Width * bitmap.Height);
            for (int y = 0; y < bitmap.Height; y++)
            {
                for (int x = 0; x < bitmap.Width; x++)
                {
                    pixels.Add(new Pixel()
                    {
                        Color = bitmap.GetPixel(x, y),
                        Point = new Point() { X = x, Y = y }
                    });

                }
            }
            return pixels;
        }
    }
    public class Pixel
    {
        public Point Point { get; set; }
        public Color Color { get; set; }
    }

`


Ответы (2 шт):

Автор решения: Bulson

А если так?

var result = openFileDialog1.ShowDialog();
if (result != DialogResult.OK)
    return;

try
{
     pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
     var bitmap = new Bitmap(pictureBox1.Image);
     var pixels = GetPixels(bitmap);
}
catch (Exception ex)
{
    Trace.WriteLine(ex.Message);
}
→ Ссылка
Автор решения: 4per

Ну попробуйте для начала yield

private void newPictureToolStripMenuItem_Click(object sender, EventArgs e)
{
    openFileDialog1.ShowDialog();
    var bitmap = new Bitmap(openFileDialog1.FileName);
    Graphics g = pictureBox1.CreateGraphics();
    SolidBrush colorbrush = new SolidBrush(pixel.Color);
    foreach (var pixel in GetPixels(bitmap))
    {            
        g.FillRectangle(colorbrush, pixel.Point.X, pixel.Point.Y, 1, 1);
    }
}

IEnumarable<Pixel> GetPixels(Bitmap bitmap)
{            
    for (int y = 0; y < bitmap.Height; y++)
    {
        for (int x = 0; x < bitmap.Width; x++)
        {
            yield return new Pixel()
            {
                Color = bitmap.GetPixel(x, y),
                Point = new Point() { X = x, Y = y }
            });

        }
    }            
}
→ Ссылка