Так что я нуб, пожалуйста, отнеси это к контексту. Извините, если я что-то упустил очевидное.
Соблюдайте следующий метод:
public static void DrawImageRepeatHoriz(Bitmap i, int y)
{
int counter = 0;
while (counter < 4)
{
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(50 * counter, 0)));
counter++;
}
/*paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(0 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(1 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(2 * 50, 0)));
paint_order.Enqueue(() => buffer.Graphics.DrawImage(i, new
Point(3 * 50, 0)));*/
}
Метод должен принимать изображение и значение Y. Что он делает с ними, так это то, что при этом значении y изображение будет нарисовано несколько раз - этого достаточно, чтобы хотя бы заполнить экран.
Таким образом, изображение повторяется по экрану вдоль точки на оси Y.
Как видите, я удалил большую часть этой логики, потому что мне нужно отлаживать что-то, что мешает мне.
Когда я использую цикл for, эквивалентный присутствующему циклу while, или сам цикл while, кажется, что int counter
становится недоступным, пока цикл не завершится. под этим я подразумеваю, что логика, которая умножает 50 на счетчик, происходит только один раз, несмотря на то, что он запускается несколько раз. Это объясняется тем, что вместо четырех изображений, полученных в результате повторения, остается только одно изображение - последнее изображение из четырех.
Естественно, код, который я заблокировал как комментарий, в котором повторение выполняется вручную, работает. Я имею в виду, конечно, это должно работать, и так должно быть для циклов for и while. Но почему-то, по какой-то причине, когда переменная счетчика используется для итерации, логика просто дает сбой.
Другое дело, что buffer
был создан должным образом путем распределения с использованием текущего контекста и g, который был возвращен SomeForm.CreateGraphics()
Так что, пожалуйста, не Не беспокойтесь о графике, она работает нормально, когда я делаю это вручную, как я сказал. buffer
допустимо, а используемые параметры действительны.
Заранее спасибо.
Это очень расстраивает.
РЕДАКТИРОВАТЬ: Глупый я, я не объяснил paint_order
.
static Queue<Action> paint_order = new Queue<Action>(20);