Как реализовать пиксельные данные как Array [i] [j] в приложении для iphone? - PullRequest
0 голосов
/ 13 февраля 2011

Как я могу реализовать пиксельные данные изображения как

Array [i] [j] = 255;

без вычисления byteIndex необработанных данных с помощью bytesPerPixel и bytesPerRow:

int byteIndex = (bytesPerRow * j) + i * bytesPerPixel;

i и j - координаты x, y изображения.

1 Ответ

3 голосов
/ 13 февраля 2011

Что ж, вы можете сделать это, выделив 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 градусов, отражение, обрезка и т. Д.)

...