ios - 将 CVImageBufferRef 转换为 CGImageRef 以直接处理像素有什么意义?

标签 ios ios4 video

我想分析来自 iOS 相机的每帧像素。我想知道是否有任何理由从 CVImageBufferRef 转到 CGImageRef,然后从 CGImageRef 获取像素,或者这些数据是否基本相同。想到的事情可能是转换过程中发生的色彩空间魔法?

最佳答案

我只是在研究这个问题,发现 CVImageBufferRef 通常可以直接读取为 24 BPP 像素,但棘手的部分是检查 CVPixelBufferGetBytesPerRow(imageBuffer) 的结果以处理每行返回字节的情况与 width * 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);
    }
  }

关于ios - 将 CVImageBufferRef 转换为 CGImageRef 以直接处理像素有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5893039/

相关文章:

ios - 键盘高度 0

iphone - 如何只需轻轻一按即可拖动 MKPinAnnotationView 引脚?

ios4 - 自定义彩色 UITabBar 图标

未压缩视频的视频比特率计算

javascript - WebRTC Server PeerJS 获取数据流

ios - NSDateFormatter dateFromString 返回错误月份的日期

ios - 使用循环打印字典的值

delphi - 使用 FFMPEG 减慢视频的音频速度

ios - 在 Swift 中将一张图像置于另一张图像的中心

苹果手机 : How to draw line on Label?