путаница метода файла заголовка screen.h

`Получить шаг (количество байтов между пикселями в разных строках)

screen_get_buffer_property_iv (mScreenPixelBuffer, SCREEN_PROPERTY_STRIDE, &mStride) `

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

1

Решение

Если у нас есть прямоугольная группа пикселей (экран, растровое изображение или что-то подобное), у программы должен быть способ рассчитать положение пикселя. Давайте назовем этот вид группы пикселей «поверхностью».

Поверхность может быть разбита на отдельные пиксели, и мы могли бы просто поместить в очень длинную строку и число от 0 до некоторого большого числа (например, экран 1280 x 1024 будет иметь 1310720 пикселей). Но если вы показываете этот длинный ряд пикселей на экране, имеет больше смысла говорить о строках пикселей длиной 1280 пикселей, которые имеют 1024 строки.

Теперь предположим, что мы хотим нарисовать линию от пикселей 100 100 до 100 200. Мы можем легко написать это как:

Int I;
для (я = 100; я < 200; я ++)
{
setpixel (поверхность, 100, 100 + i, цвет);
}

Теперь, если мы хотим реализовать setpixel, что нам нужно сделать? Одна вещь будет состоять в том, чтобы перевести наши координаты x, y (100, 100 + i) в местоположение нашего «длинного ряда пикселей».

Общая формула имеет тенденцию быть (x + y * width) * bytes_per_pixel, Таким образом, если у нас есть изображение с 32 битами на пиксель (четыре байта на пиксель), то получится (100 + (100 + i) * 1280) * 4

Однако, чтобы упростить проектирование графического чипа, часто существуют ограничения на такие вещи, как «ширина поверхности должна быть даже кратна X», где X обычно составляет 16, 32, 64 или некоторая другая степень 2. Иногда , это должно быть степень двойки напрямую (например, текстуры в раннем opengl могут иметь размер всего 2 ^ nx 2 ^ n пикселей — вам не нужно использовать всю текстуру). И здесь наступает шаг.

Скажем, мы хотим иметь растровое изображение размером 100 x 100 пикселей. Но у графического чипа, который мы используем для отрисовки растрового изображения на экране, есть правило, что вы ДОЛЖНЫ иметь кратные поверхности шириной 32 пикселя. Итак, мы делаем что-то вроде этого

XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...
XXXXXXXXXX...

Символы X здесь представляют фактические пиксели (10 на X) в нашем растровом изображении, а также … 28 пикселей «отходов», которые мы должны сделать, чтобы сделать графический чип счастливым.

Теперь формула использования ширины не работает, потому что из программного обеспечения, создающего растровое изображение, ширина составляет 100 пикселей. Нам нужно изменить математику, чтобы компенсировать «дополнительное пространство в конце каждой строки пикселей»:

(x + y * stride) * bytes_per_pixel

Теперь stride 128, но width составляет 100 пикселей.

2

Другие решения

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

В полностью упакованном массиве шаг равен размеру отдельного пикселя, умноженному на количество пикселей в строке. По соображениям производительности массивы часто выровнены так, что каждая строка занимает «круглое» число байтов, как правило, показатель степени два. Размер строки в байтах, иначе говоря, шаг, не может быть вычислен из других параметров массива и должен быть известен для правильного вычисления позиции в памяти произвольного пикселя.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector