2017-06-01 33 views
1

C#C#vuforia.image.pixels覆盖到iOS CIImage或CGImage

private Vuforia.Image QCARoutput; 
QCARoutput = CameraDevice.Instance.GetCameraImage(Vuforia.Image.PIXEL_FORMAT.RGB888); 

_iOS_sendData(QCARoutput.Pixels, QCARoutput.Pixels.length); 

的iOS

void _iOS_sendData(const char** ptrSrc, const int srcLength) { 

     NSData *imageData = [NSData dataWithBytes:(const void *)ptrSrc length:(sizeof(unsigned char) * srcLength)]; 
     CIImage *ciimg = [CIImage imageWithData:imageData]; 
     [delegateObject decodeWithQRcode:ciimg complete:^(NSString *result) { 
      NSLog(@"%@",result); 
     }]; 
} 

所以我wannted得到Vuforia.image.pixels这是字节[] 。然后发送到iOS覆盖到CIImage,但ciimage为空。我怎样才能将这个byte []覆盖到CIImage对象?

====== Updata公司C#======

[DllImport("__Internal")] 
private static extern void _iOS_sendData_ResultBlock(System.IntPtr ptrSrc, int srcLength); 

//================================================= 
QCARoutput = CameraDevice.Instance.GetCameraImage(Vuforia.Image.PIXEL_FORMAT.RGB888); 
IntPtr unmanagedPointer = Marshal.AllocHGlobal(QCARoutput.Pixels.Length); 
Marshal.Copy(QCARoutput.Pixels, 0, unmanagedPointer, QCARoutput.Pixels.Length); 
// Call unmanaged code 
Marshal.FreeHGlobal(unmanagedPointer); 
_iOS_sendData_ResultBlock(unmanagedPointer, QCARoutput.Pixels.Length); 

====== Updata公司的Objective-C ======

void _iOS_sendData_ResultBlock(Byte *ptrSrc, const int srcLength, iOSUnityCallBack callback) { 

     NSData *imageData = [NSData dataWithBytes:ptrSrc length:(sizeof(unsigned char) * srcLength)]; 
     CIImage *ciimg = [CIImage imageWithData:imageData]; 
     if (ciimg == nil) { 
      NSLog(@"the ciimage is nil ,stop"); 
      return; 
     } 
} 

我做一些变化。这是行不通的。

回答

1

我认为你需要更改双方的声明_iOS_sendData,C#和obj-c。我猜你有这样的事情:

//c# side 
[DllImport ("__Internal")] 
private static extern void _iOS_sendData(byte[] bytes, int length); 

不知道为什么,但bytes参数必须是一个数组的指针,而不是实际阵列。我认为这是因为Objective-C正在处理的事情。

尝试以下操作:

//c# side 
[DllImport ("__Internal")] 
private static extern void _iOS_sendData(System.IntPtr bytes, int length); 

//obj-c side 
void _iOS_sendData(Byte * bytes, int length) 

source

+1

另外,如果OP要修改本机端的数组,数组必须在C#第一俘获使GC不动它。如果没有这样做,将会出现随机崩溃。 – Programmer

+0

@Nika Kasradze我像你说的那样写了代码,它不起作用。我有没有对Byte *做一些错误的NSData?代码已更新。 – ChokWah