2014-01-31 2 views
2

이미지의 회색 음영 값을 부호없는 char 배열로 가지고 있는데, 이것을 을 통해 iOS에 표시 할 수 있도록 CGImage으로 변환하고 싶습니다. 부호없는 문자 배열의 각 값은 그레이 스케일 이미지의 픽셀 값입니다. 다음 코드를 사용하고 있지만 이미지가 표시되지 않습니다.바이트 배열을 CGImage로 덮기

-(void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSString *filename = [[NSBundle mainBundle] pathForResource:@"rectange4obs1pro" ofType:@"pgm"]; 
NSFileManager *fm = [NSFileManager defaultManager]; 
/////////////// read file /////////// 
FILE *file = fopen([filename UTF8String], "rb"); 
if (file == NULL) { 
    NSLog(@"File Not Found"); 
    return; 
} 
char name[20], secondline[10]; 
int w=0, h=0, colors=0; 
fscanf(file, "%s", name); 
fscanf(file, "%s", secondline); 
fscanf(file, "%d %d %d", &w, &h, &colors); 
printf("%d %d\n", w, h); 
unsigned char * imagedata = (unsigned char *) malloc(sizeof(unsigned char)*w*h); 
fseek(file, 1, SEEK_CUR); 
int i=0; 
while (!feof(file)) { 
    imagedata[i] = getc(file); 
    i++; 
} 
////////////////// end read file ///////////// 

CGColorSpaceRef colorSpace= CGColorSpaceCreateDeviceGray(); 
CGContextRef bitmapContext=CGBitmapContextCreate(imagedata, w, h, 8, w, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast); 
CFRelease(colorSpace); 
free(imagedata); 
CGImageRef cgImage=CGBitmapContextCreateImage(bitmapContext); 
CGContextRelease(bitmapContext); 

UIImage * newimage = [UIImage imageWithCGImage:cgImage]; 
CGImageRelease(cgImage); 
[imageview setImage:newimage]; 
} 

I 단자에 날릴 메시지 :

CGBitmapContextCreate :되지 않는 파라미터 조합 : 8 비트 정수 /컴포넌트; 16 비트/픽셀; 1 성분 색 공간; kCGImageAlphaNoneSkipLast; 100 바이트/행. Jan 31 15:25:50 sumits-mbp.bsb.igloonet check_visibility_image [4210] : CGBitmapContextCreateImage : 유효하지 않은 컨텍스트 0x0. 이것은 심각한 오류입니다. 이 응용 프로그램이나이 응용 프로그램이 사용하는 라이브러리가 잘못된 컨텍스트를 사용하고 있으므로 시스템 안정성과 안정성이 전반적으로 저하됩니다 ( ). 이 알림은 예의입니다. 으로이 문제를 해결하십시오. 곧 업데이트 될 치명적인 오류가 될 것입니다.

+0

하면 데이터가 나타내는 이미지 형식에 대한 자세한 내용이 있습니까? 오류 메시지에서 사용자가 제공 한 이미지 데이터가 BitmapContext를 만드는 데 사용하는 매개 변수에 맞지 않습니다. 예를 들어'kCGImageAlphaNoneSkipLast'는 보통 그레이 스케일 이미지의 경우'kCGImageAlphaNone'입니다. – Volker

+0

고마워요 @ 볼커, 내가 대답을 가지고 :) –

+0

만약 내가 답변을 코멘트를 게시 할 수도 있습니다 – Volker

답변

0

이 코드는 현재 작동하고 있습니다. 문제가 있습니다.

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSString *filename = [[NSBundle mainBundle] pathForResource:@"10CamsHGallery" ofType:@"pgm"]; 
NSFileManager *fm = [NSFileManager defaultManager]; 
/////////////// read file /////////// 
FILE *file = fopen([filename UTF8String], "rb"); 
if (file == NULL) { 
    NSLog(@"File Not Found"); 
    return; 
} 
char name[20], secondline[10]; 
int w=0, h=0, colors=0; 
fscanf(file, "%s", name); 
fscanf(file, "%s", secondline); 
fscanf(file, "%d %d %d", &w, &h, &colors); 
//printf("%d %d\n", w, h); 
unsigned char * imagedata = (unsigned char *) malloc(sizeof(unsigned char)*w*h); 
fseek(file, 1, SEEK_CUR); 
int i=0; 
while (!feof(file)) { 
    int val = getc(file); 
    imagedata[i] = val; 
    i++; 
} 
////////////////// end read file ///////////// 

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray(); 
CFDataRef rgbData = CFDataCreate(NULL, imagedata, w * h); 
CGDataProviderRef provider = CGDataProviderCreateWithCFData(rgbData); 
CGImageRef rgbImageRef = CGImageCreate(w, h, 8, 8, w , colorspace, kCGBitmapByteOrderDefault, provider, NULL, true, kCGRenderingIntentDefault); 
CFRelease(rgbData); 
CGDataProviderRelease(provider); 
CGColorSpaceRelease(colorspace); 
UIImage * newimage = [UIImage imageWithCGImage:rgbImageRef]; 
imageview.frame = CGRectMake(imageview.frame.origin.x,imageview.frame.origin.y, w, h); 
[imageview setImage:newimage]; 
CGImageRelease(rgbImageRef); 

}