从UIImage获取二进制数据

时间:2017-05-19 19:57:36

标签: ios image bitmap binary core-bluetooth

我有一个要求,我必须将图像从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]然后它给了我39087bytes。

根据计算结果如何,图像中的字节数应为61440,为128X3X160。

任何人都可以告诉我们为什么会有区别。

此外,NSdata是像

这样的数据

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

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

我可以使用NSData的GetByte方法获取像0x41,0x72这样的数据。但是在Corebluetooth中我们必须在NSData中发送数据,所以我必须将0x41,0x72转换为NSData。

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

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

任何帮助都会得到高度赞赏

由于

0 个答案:

没有答案