Я использую следующий код (из сообщения в блоге), чтобы изменить размер изображения
if (inImage.size.width <= inImage.size.height) {
// Portrait
ratio = inImage.size.height / inImage.size.width;
resizedRect = CGRectMake(0, 0, width, width * ratio);
}
else {
// Landscape
ratio = inImage.size.width / inImage.size.height;
resizedRect = CGRectMake(0, 0, height * ratio, height);
}
CGImageRef imageRef = [inImage CGImage];
CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);
if (alphaInfo == kCGImageAlphaNone)
alphaInfo = kCGImageAlphaNoneSkipLast;
CGContextRef bitmap = CGBitmapContextCreate(
NULL,
resizedRect.size.width, // width
resizedRect.size.height, // height
CGImageGetBitsPerComponent(imageRef), // really needs to always be 8
4 * resizedRect.size.width, // rowbytes
CGImageGetColorSpace(imageRef),
alphaInfo
);
, но по какой-то причине, в зависимости от размера, который я пытаюсь изменить, я получаю следующую ошибку
CGBitmapContextCreate: неподдерживаемая комбинация параметров: 8 целых бит / компонент;32 бит / пиксель;3-х компонентное цветовое пространство;kCGImageAlphaNoneSkipFirst;XXX байт / строка.
, где XXX отличается в зависимости от того, какое изображение.
Прямоугольник, который я создаю, пропорционален изображению, я беру соотношение из ширины / высоты (в зависимости отна аспекте) и кратные, которые будут целевой шириной / высотой.
Вот несколько примеров (X ошибок, / не), размер изменения будет 50xX или Xx50 в зависимости от аспекта:
Source 50x50 69x69
430x320 / X
240x320 / /
272x320 / /
480x419 / X
426x320 X X
480x256 X X