我有一个要求,我必须将图像从 ios 设备发送到另一个设备 corebluetooth,其他设备是 BLE 设备。
基本需求是:
1)图像尺寸应为128X160
2) 8 位,即每种颜色 8 位
3)3个通道
4) 每像素 24 位
5) 图像应有 61440 个字节,即 (3X128X160)
为了获得 3 通道和每像素 24 位,我使用下面的 OpenCV 代码,就像在本机 ios 中一样,我找不到将 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 bytes] 时,它给了我 39087 字节。
这是如何发生的,根据计算,图像中的字节数应为 61440,即 128X3X160。
谁能告诉我为什么会有这样的差异。
此外 NSdata 是这样的数据
但根据我的要求,我每次都必须发送一个字节。发送数据的类型应为0x41、0x72等。
我可以使用 NSData 的 GetByte 方法获取像 0x41,0x72 这样的数据。但在 Corebluetooth 中,要在设备上写入数据,我们必须仅在 NSData 中发送数据,因此我必须再次将 0x41,0x72 转换为 NSData。
我可以将数据作为 NSData 发送吗?它与发送 0x41,0x72 相同吗?
为什么 NSData 字节数和基于计算的字节数存在差异
任何帮助将受到高度赞赏
Thanks