代码之家  ›  专栏  ›  技术社区  ›  jtrim

iPhone-获取指向cgdataprovider背后数据的指针?

  •  2
  • jtrim  · 技术社区  · 15 年前

    我正在尝试获取一个CGIMAGE,并将其数据复制到一个缓冲区中,以供以后处理。下面的代码是目前为止我拥有的,但有一件事我不喜欢它-它复制图像数据两次。一次用于 CGDataProviderCopyData() 还有一次 :getBytes:length 调用imgdata。我还没有找到一种方法可以将图像数据直接复制到我的缓冲区中,并将 cgdataProvidercopydata()。 步骤,但必须有一种方法……有什么指示吗?(双关英尺)

    NSData *imgData = (NSData *)(CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef)));
    
    CGImageRelease(myCGImageRef);
    
    // i've got a previously-defined pointer to an available buffer called "mybuff"
    [imgData getBytes:mybuff length:[imgData length]];
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   lucius    15 年前

    除非你在使用仪器测量时看到性能问题,否则我不认为复制两次是一个大问题。您总是可以直接存储cfdataref imgdata而不是mybuff。

    编辑
    我说的是这种代码:
    在类接口中添加一个数组:

    NSMutableArray *images;
    

    在init:方法中:创建数组:

    images = [[NSMutableArray alloc] init];
    

    并且有一个DealLoc;

    -(void)dealloc{
        [images release];
    }
    

    在保存每个图像的代码中:

    CGDataRef imageDataRef = CGDataProviderCopyData(CGImageGetDataProvider(myCGImageRef)));
    [images addObject: (NSData*)imageDataRef];
    CGRelease(imageDataRef);
    
        2
  •  0
  •   Community CDub    7 年前

    请参阅此答案: Does CGDataProviderCopyData() actually copy the bytes? Or just the pointer?

    看起来直接访问cgdataProvider后面的缓冲区仅限于私有API。