2012-11-19 3 views
0

.png 이미지를 수정하여 폴더에 저장하고 싶습니다. iPhone에 저장된 PNG가 다시로드 된 후에 달라집니다.

  1. 는 수정을 NSData
  2. 에서 새있는 UIImage를 만들 일부 픽셀
  3. 을 수정 이미지 뷰의 이미지 속성
  4. 에 폴더에
  5. 설정이 동일있는 UIImage이있는 UIImage 저장을 NSData
  6. 에있는 UIImage로 변환

UIImage의 이미지를 확인하면 픽셀 데이터는 정확하지만 저장된 이미지를로드하면 픽셀 데이터가 조금 다릅니다 t를 수정 된 값에서.

  • 107 -76 -43 RGBA888 형식의 원 화상으로부터 하나 개의 화소 -1 //
  • 93 -89 -1 -56 // 변경된 화소 값
  • 예 :

    93 -89 -56 -1 // imageView의 이미지로 설정하고 다시 읽은 후 픽셀 값

  • 95 -91 -57 -1 // 이미지 값을 다시로드 한 후

내 이미지 저장 방법 :

- (void) saveImage: (UIImage*) image toFolder: (NSString*) folder 

{

[self.library saveImage: image toAlbum: folder withCompletionBlock:^(NSError *error) { 
    if (error!=nil) { 
     NSLog(@"Error: %@", [error description]); 

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                 message: [error description] 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    }else{ 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Image saved!" 
                 message: nil 
                 delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
}]; 

}

픽셀 수정 방법 :

CGImageRef cRef = CGImageRetain(_imageView.image.CGImage); 
NSData* pixelData = (NSData*) CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(cRef))); 
// image raw data  
signed char* pixelBytes = (signed char *)[pixelData bytes]; 

// MODIFY SOME PIXEL HERE 

NSData* newPixelData = [NSData dataWithBytes:pixelBytes length:[pixelData length]]; 
// cast NSData as CFDataRef 
CFDataRef imgData = (CFDataRef)CFBridgingRetain(newPixelData); 
// Make a data provider from CFData 
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData(imgData); 

// get PNG properties from cRef 
size_t width = CGImageGetWidth(cRef); 
size_t height = CGImageGetHeight(cRef); 
size_t bitsPerComponent = CGImageGetBitsPerComponent(cRef); 
size_t bitsPerPixel = CGImageGetBitsPerPixel(cRef); 
size_t bytesPerRow = CGImageGetBytesPerRow(cRef); 
CGColorSpaceRef colorSpace = CGImageGetColorSpace(cRef); 
CGBitmapInfo info = CGImageGetBitmapInfo(cRef); 
CGFloat *decode = NULL; 
BOOL shouldInteroplate = NO; 
CGColorRenderingIntent intent = CGImageGetRenderingIntent(cRef); 

// cRef PNG properties + imgDataProvider's data 
CGImageRef throughCGImage = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, info, imgDataProvider, decode, shouldInteroplate, intent); 
CGDataProviderRelease(imgDataProvider); 
// make UIImage with CGImage 
UIImage* newImage = [UIImage imageWithCGImage:throughCGImage]; 
CGImageRelease(throughCGImage); 

[self saveImage:newImage toFolder:@"DEMOFOLDER"]; 

_imageView.image = newImage; 

답변

0

내 나쁜, 아이폰 OS의 기본은 JPG와 같은 이미지를 저장합니다.

관련 문제