使用c ++和objective c从原始图像复制数据

时间:2017-09-05 09:26:59

标签: c++ objective-c

我从图书馆收到一个回调,它给我一张640 * 480 * 4的原始图像R8G8B8A8

我确实将它复制到另一个缓冲区然后我尝试跳过第4个缓冲区,因为我的框架仅适用于R8G8B8

我尝试调试并查看变量d中的字节,但字节都是垃圾。

-(void)onRawImageBuffer:(NSData * _Nonnull)data withWidth:(int)width andHeight:(int)height andBytesPerPixel:(int)bytesPerPixel;
{
    NSUInteger len = [data length];



    memcpy(m_CopyData, [data bytes], len);


    for(int i =0; i < 640*480*3;i++)
    {
        if ( i%4 == 3 )
            continue;
        else{
            m_FrameData[i] = m_CopyData[i];

        }
    }

    NSData* d = [NSData dataWithBytes:(const void *)m_FrameData length:640*480*3];


    Input::SensorInput::getSingleton()->setVideoData( m_FrameData );



}

1 个答案:

答案 0 :(得分:1)

  1. 你很难编码宽度和高度;
  2. 您的循环仍必须转到width * height * 4;
  3. 您尚未分配m_FrameData;
  4. 您没有考虑bytesPerPixel;
  5. continue;仍然将i提前一个,您必须使用两个索引;
  6. 这是非常低效的,更好地将RGB复制在一起,跳过A,将src指针提前4,将dst指针提高3。