Ios 将字节数组转换为CGImage
我有一个无符号字符数组中图像的灰度值,我想将其转换为Ios 将字节数组转换为CGImage,ios,objective-c,Ios,Objective C,我有一个无符号字符数组中图像的灰度值,我想将其转换为CGImage,以便我可以使用它通过UIImage在iOS中显示它。无符号字符数组的每个值都是灰度图像的像素值。我正在使用以下代码,但未显示图像 -(void)viewDidLoad { [super viewDidLoad]; NSString *filename = [[NSBundle mainBundle] pathForResource:@"rectange4obs1pro" ofType:@"pgm"]; NSFileManager
CGImage
,以便我可以使用它通过UIImage
在iOS中显示它。无符号字符数组的每个值都是灰度图像的像素值。我正在使用以下代码,但未显示图像
-(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];
}
我在终端上得到的信息是:
CGBitmapContextCreate:不支持的参数组合:8整数
比特/组件;16位/像素;单分量颜色空间;
kCGImageAlphaNoneSkipLast;100字节/行。一月三十一日15:25:50
sumits-mbp.bsb.igloonet检查可见性图像[4210]:
CGBitmapContextCreateImage:上下文0x0无效。这是一个严重的问题
错误。此应用程序或其使用的库正在使用无效的
环境,从而导致环境的全面恶化
系统的稳定性和可靠性。这是一个礼貌的通知:请
解决这个问题。这将成为即将进行的更新中的致命错误
这个代码现在起作用了,我有问题了
- (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);
}您是否有关于数据所代表的图像格式的更多详细信息?从错误消息中可以明显看出,您提供的图像数据不适合用于创建BitmapContext的参数。例如,对于普通灰度图像,
kCGImageAlphaNoneSkipLast
可能是kCGImageAlphaNone
。谢谢@Volker,我得到了答案:)如果有效,我可能会将注释作为答案发布