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);

Переменная данных представляет собой беззнаковый символ.

И вот как я пытаюсь получить UIImage:

NSData *imgData = [NSData dataWithBytes:data[i][j] length:TILE_WIDTH*TILE_HEIGHT*numberOfCompponents];
        UIImage *img = [UIImage imageWithData: imgData];

Img (UIImage) остается нулевым.

Хорошо, это не фон: я пытаюсь создать пиксельное приложение :). Изображения с камеры iPhone 4 слишком большие по размеру, поэтому я разделил изображение на меньшие. При этом, когда необходимо обновить пикселизированную (затронутую) область, чтобы отобразился эффект пикселизации, я обновляю UIImage меньшего размера. Мне нужно было сделать это так, потому что в предыдущих тестах было похоже, что обновление UIImage убивает процессор. Тем не менее, изображения меньшего размера теперь имеют размер около 80x100 пикселей, и обновление работает не так гладко, насколько это возможно. Иногда, если вы двигаете пальцем слишком быстро, он пропускает некоторые точки: D. Я думаю, что использование этого метода для создания UIImage из байтового массива быстрее, чем этот:

CGImageRef cgImage = CGImageCreate(TILE_WIDTH, TILE_HEIGHT, bitsPerComponent,
                                   bitsPerPixel, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big, 
                                   dataProvider, NULL, false, kCGRenderingIntentDefault);
UIImage *imageToBeUpdated = [UIImage imageWithCGImage:cgImage];

Я прав?


person Andrei Neacsu    schedule 27.02.2011    source источник


Ответы (1)


[UIImage imageWithData:data] анализирует данные в известном формате файла изображения (например, jpeg, png или gif; полный список в documentation. Вы передаете ему необработанные данные пикселей, которые не поддерживаются.

Попробуйте это вместо CGBitmapContextGetData, чтобы вывести изображение из контекста:

CGImageRef imgRef = CGBitmapContextCreateImage(context);
UIImage *img = [UIImage imageWithCGImage:imgRef];
person Anomie    schedule 27.02.2011
comment
Большое спасибо. В настоящее время я ищу очень быстрый способ обновить изображение. Поскольку мне нужно обновить изображение на touchMoved, а также выполнить вычисления, необходимые для пикселизации, это потребляет много ресурсов. Есть ли более быстрый способ обновить изображение? - person Andrei Neacsu; 27.02.2011
comment
Я понял. Благодарю за ваш ответ. - person Andrei Neacsu; 28.02.2011