Ios 从UIImage获取二进制数据

Ios 从UIImage获取二进制数据,ios,image,bitmap,binary,core-bluetooth,Ios,Image,Bitmap,Binary,Core Bluetooth,我有一个要求,我必须将图像从ios设备发送到另一个设备。其他设备是蓝牙设备 基本需要是: 1) 图像大小应为128X160 2) 8位,即每种颜色8位 3) 3频道 4) 每像素24位 5) 图像应具有61440个字节,即(3X128X160) 为了获得3通道和每个pixcel 24位的图像,我使用了OpenCV的以下代码,就像在本机ios中一样,我使用dint find选项将UIImage转换为24位位图 //uiimg is 128X160 size cv::Mat image; cv::

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

基本需要是:

1) 图像大小应为128X160

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

3) 3频道

4) 每像素24位

5) 图像应具有61440个字节,即(3X128X160)

为了获得3通道和每个pixcel 24位的图像,我使用了OpenCV的以下代码,就像在本机ios中一样,我使用dint find选项将UIImage转换为24位位图

//uiimg is 128X160 size

cv::Mat image;
cv::Mat convertedImage;
UIImageToMat(uiimg, image);
cvtColor(image, convertedImage, CV_RGBA2BGR);
如果我检查BYT的数量和每个像素的位数,那么结果如下

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字节]时,它会给我39087字节

根据计算,图像中的BYT数量应为61440,为128X3X160

有人能告诉我为什么会有不同吗

此外,NSdata是类似于

但根据我的要求,我每次必须发送一个字节。发送数据的类型应为0x41、0x72等

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

我可以将数据作为NSData发送吗?它是否与发送0x41,0x72相同

为什么NSData字节计数和基于计算的字节计数存在差异

任何帮助都将不胜感激


谢谢

您从何处获取原始图像?另外,通过谷歌搜索“uiimage获取位图数据”,我发现:@fspirit,图像被放在捆绑包中。然后读取并解压缩到位图,如我之前发布的链接所示。我们可以从NSData仅获取24位位图吗?