Я считаю, что imageWithData принимает image-file-data , а не image-display-data, то есть то, что вы передаете.Попробуйте что-то вроде этого:
NSData * newData = UIImageJPEGRepresentation(image, 1.0);
UIImage *image2 = [UIImage imageWithData:newData];
UIImageJPegRepresentation()
возвращает данные, которые вы записали бы в файл для создания файла .jpg на диске.Я уверен на 99,44%, чего хочет imageWithData:
.
ПРИМЕЧАНИЕ: если вы хотите манипулировать данными перед созданием image2, то вам do нужны данные дисплея,в этом случае способ получить изображение обратно немного сложнее, но выглядит примерно так:
// Create a color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
if (colorSpace == NULL)
{
fprintf(stderr, "Error allocating color space\n");
return nil;
}
CGContextRef context = CGBitmapContextCreate (bits, size.width, size.height,
8, size.width * 4, colorSpace,
kCGImageAlphaPremultipliedLast | IMAGE_BYTE_ORDER
);
CGColorSpaceRelease(colorSpace );
if (context == NULL)
{
fprintf (stderr, "Error: Context not created!");
return nil;
}
CGImageRef ref = CGBitmapContextCreateImage(context);
//free(CGBitmapContextGetData(context)); //* this appears to free bits -- probably not mine to free!
CGContextRelease(context);
UIImage *img = [UIImage imageWithCGImage:ref];
CFRelease(ref); //* ?!?! Bug in 3.0 simulator. Run in 3.1 or higher.
return img;
(Приведенный выше код получен из примеров Эрики Садун. Умные части ее; все ошибки мои. Но это общая идея, и она должна работать.)