Есть ли смысл конвертировать CVImageBufferRef в CGImageRef для прямой работы с пикселями? - PullRequest
1 голос
/ 05 мая 2011

Я хочу проанализировать пиксели для каждого кадра, поступающего с камеры iOS.Мне интересно, есть ли какая-либо причина перейти от CVImageBufferRef к CGImageRef, а затем получить пиксели из CGImageRef, или же эти данные будут по существу такими же.Вещи, которые приходят на ум, возможно, волшебство цветового пространства происходит во время преобразования?

1 Ответ

0 голосов
/ 12 января 2013

Я просто смотрел на эту проблему и обнаружил, что CVImageBufferRef обычно может быть прочитан непосредственно как 24 пикселя BPP, но сложная часть заключается в проверке результатов CVPixelBufferGetBytesPerRow (imageBuffer), чтобы иметь дело со случаем, когда возвращаемые байты на строку не то же самое, что ширина * sizeof (uint32_t). В моем коде мне нужно сгладить входные пиксели в буфер, который не содержит байтов заполнения, поэтому вот что я делаю:

  size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
  ...

  int outputBytesPerRow = width * sizeof(uint32_t);

  if (bytesPerRow == outputBytesPerRow) {
    // In this optimized case, just copy the entire framebuffer in one go

    memcpy(frameBuffer.pixels, baseAddress, frameBuffer.numBytes);
  } else {
    // Non-simple layout where padding bytes appear after the pixels, need to copy
    // one row at a time into the flat pixel buffer layout.

    for (int rowi = 0; rowi < height; rowi++) {
      void *inputRowStartPtr = baseAddress + (rowi * bytesPerRow);
      void *outputRowStartPtr = frameBuffer.pixels + (rowi * outputBytesPerRow);
      memcpy(outputRowStartPtr, inputRowStartPtr, outputBytesPerRow);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...