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;
}
}
我做一些变化。这是行不通的。
另外,如果OP要修改本机端的数组,数组必须在C#第一俘获使GC不动它。如果没有这样做,将会出现随机崩溃。 – Programmer
@Nika Kasradze我像你说的那样写了代码,它不起作用。我有没有对Byte *做一些错误的NSData?代码已更新。 – ChokWah