Я использую WINAPI CreateDIBSection()
рисовать пиксель за пикселем, то я бита на DC. Мне любопытно. Что происходит с базовыми структурами данных CreateDIBSection? Структура BITMAPINFO хранит высоту ширины экрана / клиента. Затем VOID ** ppvBits обрабатывает 24-битные цвета. Так можно ли все это рассматривать как трехмерный массив? Похоже на это
int пиксели [высота] [ширина] [цвет]?
Я спрашиваю, почему CreateDIBSection()
Функция очень-очень быстрая, но если я создаю похожий массив (900 * 1800 * (246 * 256 * 256)), это действительно очень медленно.
Как Microsoft получает этот метод так быстро и эффективно? Я перепробовал все. Int *** указатели на указатель на указатель, int*** malloc
, пытался NEW
и т.д., они все очень медленно работают на больших массивах. Мне просто любопытно, как я могу построить 3D-массив, который также работает. Какие-нибудь мысли?
Мне нужен массив около 20000x1800x100000. CreateDIBSection()
хранит это быстро без проблем. Но как насчет стандартного dynmaic массива C / C ++?
Мне нужно хранить то, что в CreateDIBSection()
а также BITMAPINFO
во 2-м массиве.
Он не использует трехмерный массив. Для цветов нужен только одномерный массив. Ты можешь получить X
а также Y
координаты из индекса и зная ширину растрового изображения.
row = index / width;
column = index % width;
Для 24-битного цвета размер матрицы width * height * 3 bytes
(один байт для каждого цвета). Когда он загружается в память, он дополняется до 4 байтов (размер целого числа).
Ты можешь использовать GetDibBits для прямого доступа к битам
Смотрите также: растровый формат