从UIImage获取二进制数据

我有一个要求,我必须从ios设备发送图像到另一个设备corebluetooth,其他设备是BLE设备。

基本需求是:

1)图片的大小应该是128X160

2)8位,即每种颜色8位

3)3个频道

4)每像素24位

5)图像应该有61440(即(3X128X160)

要获得3通道和每像素24位,我使用OpenCV的代码,如本机ios我dintfind选项将UIImage转换成24位位图

//uiimg is 128X160 size cv::Mat image; cv::Mat convertedImage; UIImageToMat(uiimg, image); cvtColor(image, convertedImage, CV_RGBA2BGR); 

如果我检查字节数和每像素位数,那么它会出现如下

 img = MatToUIImage(convertedImage); size_t bytesPerRow1 = CGImageGetBytesPerRow(img.CGImage); // It gives 3, seems like correct which is needed size_t total = bytesPerRow1 * img.size.height; //it gives 61440, seems like correct which is need 

但是当我把这个UIImage转换成NSDate,然后检查[NSData字节],那么它给了我39087bytes。

这是怎么发生的,根据计算,图像中的字符数应该是61440,如128X3X160。

任何人都可以告诉为什么有一个区别。

而且NSdata是类似的数据

<89504e47 0d0a1a0a 0000000d 49484452 00000080 000000a0 08020000 004bf0f3 aa000000 01735247 4200aece 1ce90000 001c6944 4f540000 00020000 00000000 00500000 00280000 00500000 00500000 3d3e90d2 90340000 3d0a4944 41547801 d4bd0774 1cc7b926 3a67c3dd f7eededd …..等等>

但根据我的要求,我必须每次发送一个字节。 发送的数据应该是0x41,0x72等types

我可以使用NSData的GetByte方法获得像0x41,0x72这样的数据。 但在Corebluetooth设备上写数据,我们只能在NSData中发送数据,所以我再次必须将0x41,0x72转换为NSData。

我可以发送数据为NSData,是否发送0x41,0x72相同?

为什么根据计算NSData字节数和字节数有差别?

任何帮助将高度赞赏

谢谢