iPhone - UIImage imageWithData возвращается ноль
Мне нужно создать UIImage из байтового массива. Вот теперь я создаю байтовый массив:
image = CGImageCreateWithImageInRect(aux.CGImage, imageRect);
context = CGBitmapContextCreate (data[i][j], TILE_WIDTH, TILE_HEIGHT,
bitsPerComponent, bitmapBytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);//kCGImageAlphaNoneSkipFirst);//kCGImageAlphaNone);//
CGContextDrawImage(context, CGRectMake(0, 0, TILE_WIDTH, TILE_HEIGHT), image);
data[i][j] = CGBitmapContextGetData (context);
Переменная data является беззнаковым символом.
И вот как я пытаюсь получить UIImage:
NSData *imgData = [NSData dataWithBytes:data[i][j] length:TILE_WIDTH*TILE_HEIGHT*numberOfCompponents];
UIImage *img = [UIImage imageWithData: imgData];
Img (UIImage) остается нулевым.
Хорошо, не это фон: я пытаюсь создать приложение pixelate:). Изображения с камеры iPhone 4 слишком велики по размеру, поэтому я разделил изображение на более мелкие. Таким образом, когда необходимо обновить область с пикселизацией (касание), чтобы отобразить эффект пикселизации, я обновляю меньший UIImage. Мне нужно было сделать это так, потому что в предыдущих тестах он показался мне так, будто обновление UIImage убивает процессор. Тем не менее, меньшие изображения теперь имеют размер 80x100 pxl, и обновление работает не настолько гладко, насколько это возможно. Иногда, если вы двигаете пальцем быстро, он пропускает некоторые места:D. Я думаю, что использование этого метода для создания UIImage из байтового массива быстрее, чем этот:
CGImageRef cgImage = CGImageCreate(TILE_WIDTH, TILE_HEIGHT, bitsPerComponent,
bitsPerPixel, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big,
dataProvider, NULL, false, kCGRenderingIntentDefault);
UIImage *imageToBeUpdated = [UIImage imageWithCGImage:cgImage];
Я прав?
1 ответ
[UIImage imageWithData:data]
анализирует данные в известном формате файла изображения (например, jpeg, png или gif; полный список в документации. Вы передаете ему необработанные данные пикселей, что не поддерживается.
Попробуйте это вместо CGBitmapContextGetData
чтобы вывести изображение из контекста:
CGImageRef imgRef = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:imgRef];