Iphone 崩溃:iOS 6代码的UIImage样式崩溃?
下面是我为图像设计样式的代码。在iOS4.3及以上版本中,代码工作正常,但在ios6中,代码崩溃Iphone 崩溃:iOS 6代码的UIImage样式崩溃?,iphone,objective-c,ios6,uiimageview,uiimage,Iphone,Objective C,Ios6,Uiimageview,Uiimage,下面是我为图像设计样式的代码。在iOS4.3及以上版本中,代码工作正常,但在ios6中,代码崩溃 -(UIImage *)grayImage:(UIImage *)image { CGImageRef img= image.CGImage;//imageSelected.CGImage;//self.originalPhoto.CGImage; CFDataRef dataref=CGDataProviderCopyData(CGImageGetDataProvider(img
-(UIImage *)grayImage:(UIImage *)image
{
CGImageRef img= image.CGImage;//imageSelected.CGImage;//self.originalPhoto.CGImage;
CFDataRef dataref=CGDataProviderCopyData(CGImageGetDataProvider(img));
int length=CFDataGetLength(dataref);
UInt8 *data=(UInt8 *)CFDataGetBytePtr(dataref);
for(int index=0;index<length;index+=4){
Byte grayScale =
(Byte)(data[index+3]*.11 +
data[index + 2] * .59 +
data[index + 1] * .3);
//set the new image's pixel to the grayscale version
data[index+1] = grayScale;// Code Crash here , By SIGABRAT (Exe_Bad_Access)
data[index+2] = grayScale;
data[index+3] = grayScale;
}
// .. Take image attributes
size_t width=CGImageGetWidth(img);
size_t height=CGImageGetHeight(img);
size_t bitsPerComponent=CGImageGetBitsPerComponent(img);
size_t bitsPerPixel=CGImageGetBitsPerPixel(img);
size_t bytesPerRow=CGImageGetBytesPerRow(img);
// .. Do the pixel manupulation
CGColorSpaceRef colorspace=CGImageGetColorSpace(img);
CGBitmapInfo bitmapInfo=CGImageGetBitmapInfo(img);
CFDataRef newData=CFDataCreate(NULL,data,length);
CGDataProviderRef provider=CGDataProviderCreateWithCFData(newData);
// .. Get the Image out of this raw data
CGImageRef newImg=CGImageCreate(width,height,bitsPerComponent,bitsPerPixel,bytesPerRow,colorspace,bitmapInfo,provider,NULL,true,kCGRenderingIntentDefault);
// .. Prepare the image from raw data
UIImage* rawImage = [[UIImage alloc] initWithCGImage:newImg] ;
// .. done with all,so release the references
CFRelease(newData);
CGImageRelease(newImg);
CGDataProviderRelease(provider);
CFRelease(dataref);
return rawImage;
}
-(UIImage*)灰度图像:(UIImage*)图像
{
CGImageRef img=image.CGImage;//imageSelected.CGImage;//self.originalPhoto.CGImage;
CFDataRef dataref=CGDataProviderCopyData(CGImageGetDataProvider(img));
int length=CFDataGetLength(dataref);
UInt8*数据=(UInt8*)CFDataGetBytePtr(dataref);
对于(int index=0;index请使用CFMutableDataRef代替CFDataRef,如下所示
CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
//->write this:
CFMutableDataRef m_DataRef = CFDataCreateMutableCopy(0, 0, CGDataProviderCopyData(CGImageGetDataProvider(inImage)));
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef);
//->write this
UInt8 *m_PixelBuf=(UInt8 *)CFDataGetMutableBytePtr(m_DataRef);
崩溃后报告plz??你为什么要双重解除对指针的引用?我已经检查过了,但在iOS6模拟器中它没有崩溃。这个崩溃是在设备上发生的。请看屏幕截图。我正在模拟器和iPad上运行此代码,在这两种情况下,它都是在同一阶段崩溃的。我不明白为什么会出现EXE_BAD_访问。