Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 按位命令生成错误访问错误_Ios_Objective C - Fatal编程技术网

Ios 按位命令生成错误访问错误

Ios 按位命令生成错误访问错误,ios,objective-c,Ios,Objective C,我正在编写一个应用程序,将一个图像信息隐藏到另一个图像中!我通过从第一个图像中删除4个低电平位并从第二个图像中添加4个高电平位来实现这一点! 这是我的密码: CGImageRef publicImage = _publicImageView.image.CGImage; CFDataRef thePublicData; thePublicData = CGDataProviderCopyData(CGImageGetDataProvider(publicImage)); UInt8 *p

我正在编写一个应用程序,将一个图像信息隐藏到另一个图像中!我通过从第一个图像中删除4个低电平位并从第二个图像中添加4个高电平位来实现这一点! 这是我的密码:

    CGImageRef publicImage = _publicImageView.image.CGImage;
CFDataRef thePublicData;
thePublicData = CGDataProviderCopyData(CGImageGetDataProvider(publicImage));
UInt8 *publicPixelData = (UInt8 *) CFDataGetBytePtr(thePublicData);
int publicDataLength = CFDataGetLength(thePublicData);

//__________________________________________________________________________

CGImageRef secretImage = _secretImageView.image.CGImage;
CFDataRef theSecretData;
theSecretData = CGDataProviderCopyData(CGImageGetDataProvider(secretImage));
UInt8 *secretPixelData = (UInt8 *) CFDataGetBytePtr(theSecretData);
int secretDataLength = CFDataGetLength(theSecretData);


int red = 0;
int green = 1;
int blue = 2;

for (int index = 0 ; index < publicDataLength && index < secretDataLength; index +=4) {

    uint pRed = publicPixelData [index + red] % 0x10;
    publicPixelData [index + red] -= pRed;

    uint sRed = secretPixelData [index + red] / 0x10;
    publicPixelData[index + red] += sRed;

    uint pGreen = publicPixelData [index + green] % 0x10;
    publicPixelData [index + green] -= pGreen;

    uint sGreen = secretPixelData [index + green] / 0x10;
    publicPixelData[index + green] += sGreen;

    uint pBlue = publicPixelData [index + blue] % 0x10;
    publicPixelData [index + blue] -= pBlue;

    uint sBlue = secretPixelData [index + blue] / 0x10;
    publicPixelData[index + blue] += sBlue;

}

CGContextRef context;
context = CGBitmapContextCreate(publicPixelData,
                                CGImageGetWidth(publicImage),
                                CGImageGetHeight(publicImage),
                                8,
                                CGImageGetBytesPerRow(publicImage),
                                CGImageGetColorSpace(publicImage),
                                kCGImageAlphaPremultipliedLast);

CGImageRef newCGImage = CGBitmapContextCreateImage(context);
UIImage *newImage = [UIImage imageWithCGImage:newCGImage];

CGContextRelease(context);
CFRelease(thePublicData);
CGImageRelease(newCGImage);

_hideEffectImageView.image = newImage;
CGImageRef publicImage=\u publicImageView.image.CGImage;
cfdatarefthepublicdata;
publicCDATA=CGDataProviderCopyData(CGImageGetDataProvider(publicImage));
UInt8*公共像素数据=(UInt8*)CFDataGetBytePtr(公共CDATA);
int publicDataLength=CFDataGetLength(公共CDATA);
//__________________________________________________________________________
CGImageRef securimage=\u securimageview.image.CGImage;
CFDataRef theSecretData;
theSecretData=CGDataProviderCopyData(CGImageGetDataProvider(secretImage));
UInt8*secretPixelData=(UInt8*)CFDataGetBytePtr(theSecretData);
int secretDataLength=CFDataGetLength(theSecretData);
红色整数=0;
绿色整数=1;
int蓝色=2;
对于(int index=0;index
为了恢复第二个图像,我将“\uuu hideEffectImageView”数据的位移到高级位置

以下是代码:

    CGImageRef stganoImage = _hideEffectImageView.image.CGImage;
CFDataRef stganoData;
stganoData = CGDataProviderCopyData(CGImageGetDataProvider(stganoImage));
UInt8 *steganoPixelData = (UInt8 *) CFDataGetBytePtr(stganoData);
int publicDataLength = CFDataGetLength(stganoData);



   //__________________________________________________________________________
 //   CGImageRef secretImage;
 //   CFDataRef   theSecretData;
 //   UInt8 *secretPixelData = (UInt8 *)CFDataGetBytePtr(stganoData);

    int red = 0;
    int green = 1;
    int blue = 2;


    for (int index = 0 ; index < publicDataLength; index +=4) {

        steganoPixelData [index + red] = steganoPixelData [index + red] << 0x4 ;
        steganoPixelData [index + green] = steganoPixelData [index + red] << 0x4 ;       
        steganoPixelData [index + blue] = steganoPixelData [index + red] << 0x4 ;
    }

    CGContextRef context;
    context = CGBitmapContextCreate(steganoPixelData,
                                    CGImageGetWidth(stganoImage),
                                    CGImageGetHeight(stganoImage),
                                    8,
                                    CGImageGetBytesPerRow(stganoImage),
                                    CGImageGetColorSpace(stganoImage),
                                    kCGImageAlphaPremultipliedLast);

    CGImageRef newCGImage = CGBitmapContextCreateImage(context);
    UIImage *newImage = [UIImage imageWithCGImage:newCGImage];

    CGContextRelease(context);
    CFRelease(stganoData);
    CGImageRelease(newCGImage);

    _recoverSecretImage.image = newImage;
CGImageRef stganoImage=\u hideEffectImageView.image.CGImage;
CFDataRef stganoData;
stganoData=CGDataProviderCopyData(CGImageGetDataProvider(stganoImage));
UInt8*隐写像素数据=(UInt8*)CFDataGetBytePtr(stganoData);
int publicDataLength=CFDataGetLength(stganoData);
//__________________________________________________________________________
//CGImageRef分泌图像;
//CFDataRef theSecretData;
//UInt8*secretPixelData=(UInt8*)CFDataGetBytePtr(stganoData);
红色整数=0;
绿色整数=1;
int蓝色=2;
对于(int index=0;index隐写像素数据[索引+红色]=隐写像素数据[索引+红色]这里面的某些东西可能是零。这是最可能的解释。请注销控制台您的
steganoPixelData
。我很确定这可能是零,因为您的操作是允许的,并且您在这个等式中只有一个数据结构:
steganoPixelData[索引+红色]我在控制台中记录数据,其中没有一个为零,在我的一个日志中,隐写像素数据为82,移位数据工作正常,分配数据出错。。。