将OpenGL纹理作为CIImage访问

时间:2014-01-08 15:02:44

标签: objective-c xcode opengl unity3d

我正在尝试将相机纹理的引用传递给xcode,以便我可以将其用于面部检测。我尝试过的大多数方法让我感到难过,但我认为我与目前的情况很接近。

在统一中我得到纹理id并通过插件传递:

[DllImport("__Internal")]

public static extern void SendBackground(int id, int width, int height);



//in Update

Texture bg_Img = GetComponentInChildren<VideoTextureBehaviour>().GetTexture(); //this is from Vuforia

int texture_Id = bg_Img.GetNativeTextureID();

SendBackground(texture_Id, bg_Img.width, bg_Img.height);

xcode接收纹理ID很好,然后尝试从OpenGL访问它并将其转换为CIImage

- (void) DetectFaces:(int)tex_id :(int)width :(int)height

{

    glGenTextures(1, (GLuint)&tex_id);

    glBindTexture(GL_TEXTURE_2D, (GLuint)tex_id);



    CIImage *image = [[CIImage alloc]  initWithTexture:(GLuint)tex_id size:CGSizeMake(width, height) flipped:YES colorSpace: (CGColorSpaceRef) kCGColorSpaceModelRGB];

}

目前,最后一行在运行时导致错误的访问异常。我需要将纹理添加到CIImage,以便我可以在其上使用iOS本机CIDetector代码。

1 个答案:

答案 0 :(得分:1)

你的色彩空间有问题,当你需要CGColorSpaceRef时,你正在传递一个CGColorSpaceModel。

请改为尝试:

CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
CIImage *image = [[CIImage alloc]  initWithTexture:(GLuint)tex_id size:CGSizeMake(width, height) flipped:YES colorSpace:(CGColorSpaceRef)kCGColorSpaceModelRGB];
...
CGColorSpaceRelease(cs); // Release the color space when you no longer need it

可能还有其他问题,但这对我来说似乎是不正确的。