У меня есть приложение, которое рисует фрактал Мандельброта на панели, и некоторое время назад я сделал его многопоточным с некоторой помощью и большим количеством попыток. Я сделал это с помощью CreateGraphics в каждом из потоков, поскольку я не мог использовать PaintEventArgs вне события Paint.
Теперь я хочу реализовать эффективное сохранение изображений, хотя, если это возможно (можно было бы однопоточным образом нарисовать всю картинку снова, просто чтобы сохранить ее). Но я не смог сохранить содержимое панели. Я прочитал много вопросов здесь и в других местах и пришел к выводу, что это потому, что я использовал CreateGraphics. Поэтому я хочу прекратить использовать CreateGraphics.
Но тогда на что я опираюсь?
Я пытался передать PaintEventArgs из метода Paint методам для отдельных потоков, но безуспешно.
Скажем, у меня есть метод DoWork (я прочитал Документы: P), я бы начал с этого.
{
thread.Abort();
thread = new Thread(DoWork);
thread.Start(pea)
}
Тогда я могу сделать две вещи для DoWork: либо
void DoWork(PaintEventArgs pea)
или же
void DoWork(object pea)
Первый случай не разрешен, а во втором случае я не могу использовать pea.Graphics.DrawImage.
Edit:
Вот код одного из методов рисования (DoWork в примере выше), чтобы проиллюстрировать, почему я использовал CreateGraphics.
void TekenVanOnderen()
{
Bitmap bitmap = new Bitmap(tekenpaneel.Width, 1);
using (Graphics g = tekenpaneel.CreateGraphics())
{
for (int y = tekenpaneel.Height ; y > tekenpaneel.Height / 2; y--) // De andere kant op
{
for (int x = 0; x < tekenpaneel.Width; x++)
{
double xklein = x / schaal - (tekenpaneel.Width / schaal / 2) + middenx;
double yklein = -1 * (y / schaal - (tekenpaneel.Width / schaal / 2)) + middeny;
bitmap.SetPixel(x, 0, Kleurenopties(xklein, yklein));
}
g.DrawImage(bitmap, 0, y);
}
}
}