Я пишу курсовую по работе с графикой, и моё приложение не может открывать картинки с большим разрешением
вероятно это из-за недостатка памяти, помогите оптимизировать
`
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 }
});
}
}
}