Сохраняет ли класс Bitmap в C # пиксели столбец за столбцом внутри? - PullRequest
0 голосов
/ 04 мая 2018

Рассмотрим следующий пример кода из 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);
}

Обратите внимание, что внешний цикл в гнезде для цикла перебирает индексы по ширине растрового изображения, а внутренний цикл перебирает индексы по высоте растрового изображения. Я видел фрагменты кода того же стиля в нескольких других местах.

Мой вопрос: означает ли это, что растровый объект хранит свою информацию о пикселях столбец за столбцом внутри, то есть, думая обо всех пикселях как матрицу на экране, он сохраняется в основной памяти за столбцом, как при программировании язык фортран. Причина этого вопроса заключается в том, чтобы избежать пропуска кэша, поэтому вложенный цикл должен быть организован в соответствии с форматом памяти в двумерной структуре данных.

1 Ответ

0 голосов
/ 04 мая 2018

Исходный код Bitmap можно найти здесь . Внутренне детали растрового изображения хранятся в объекте Image (ссылка на объект C ++ в памяти), который является частью GDI +.

То, что вы нашли в MSDN, - это уровень абстракции (как сказал Адриано Репетти), который позволяет вам не иметь дело с кодом позади. Дело в том, что если вы хотите работать с такими объектами, вам нужно пройти через эти «слои абстракции», которые могут снизить производительность. Другой способ - использовать какую-либо другую библиотеку или запрограммировать самих владельцев объектов Bitmap / Image.

...