Что ж, вы можете сделать это, выделив N строк из K элементов, где N - высота изображения, а K - его ширина.
Как это:
char ** image;
image = new char*[height];
for (size_t i=0;i<height;i++)
{
image[i] = new char[width];
}
Но! Не делайте этого. Это идея слова для работы с пикселями таким образом. Прежде всего, когда данные изображения находятся в плоской форме, они работают более эффективно, поскольку меньше кеш-пропусков . Другая причина - почти все библиотеки обработки изображений используют планарную модель памяти для хранения данных изображения в памяти.
Я предлагаю использовать готовые контейнеры изображений из библиотеки OpenCV (тип cv :: Mat) или Boost :: Gil . Я предпочитаю Gil гораздо больше, так как он предоставляет контейнеры с изображениями типа explicilty, например:
- повышение :: Гил :: bgra8_image_t
- повышение :: Гил :: gray32f_image_t
- и так далее ...
И обеспечивают эффективный и гибкий способ преобразования цветов (CMYK <-> HSV <-> RGBA <-> GREY) и преобразования изображений (поворот на 90 градусов, отражение, обрезка и т. Д.)