Рассмотрим следующий пример кода из msdn,
private void SetPixel_Example(PaintEventArgs e)
{
// Create a Bitmap object from a file.
Bitmap myBitmap = new Bitmap("Grapes.jpg");
// Draw myBitmap to the screen.
e.Graphics.DrawImage(myBitmap, 0, 0, myBitmap.Width, myBitmap.Height);
// Set each pixel in myBitmap to black.
for (int Xcount = 0; Xcount < myBitmap.Width; Xcount++)
{
for (int Ycount = 0; Ycount < myBitmap.Height; Ycount++)
{
myBitmap.SetPixel(Xcount, Ycount, Color.Black);
}
}
// Draw myBitmap to the screen again.
e.Graphics.DrawImage(myBitmap, myBitmap.Width, 0, myBitmap.Width, myBitmap.Height);
}
Обратите внимание, что внешний цикл в гнезде для цикла перебирает индексы по ширине растрового изображения, а внутренний цикл перебирает индексы по высоте растрового изображения. Я видел фрагменты кода того же стиля в нескольких других местах.
Мой вопрос: означает ли это, что растровый объект хранит свою информацию о пикселях столбец за столбцом внутри, то есть, думая обо всех пикселях как матрицу на экране, он сохраняется в основной памяти за столбцом, как при программировании язык фортран. Причина этого вопроса заключается в том, чтобы избежать пропуска кэша, поэтому вложенный цикл должен быть организован в соответствии с форматом памяти в двумерной структуре данных.