我正在尝试将相机纹理的引用传递给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代码。
答案 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
可能还有其他问题,但这对我来说似乎是不正确的。