Я использую этот код для изменения размера изображения, сделанного камерой. Я уменьшаю его пропорционально миниатюре, но потом я хотел бы обрезать его в квадратный формат 60x60. Я попытался включения:Изменение размера UIImage пропорционально урожая
CGImageRef imageRef = CGImageCreateWithImageInRect(CGImage, rect);
, но мне не удалось получить его работу correctly.How бы я сделать это с помощью Core Graphics?
- (UIImage *) resizeCapturedImage:(UIImage *) img toWidth:(float) w{
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(NULL,w,w, 8, 0, colorspace,kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(ctx, CGRectMake(0, 0, w,img.size.width*w/img.size.height), img.CGImage);
CGImageRef thumb = CGBitmapContextCreateImage(ctx);
UIImage *final = [UIImage imageWithCGImage:thumb scale:1.0 orientation:UIImageOrientationRight];
return final;
}
Используйте 'CGFloat', а не' float' или 'int'. –
@GuyKogus - Спасибо .. вы можете объяснить причину этого ?? потому что я не понимаю тебя .. а также я использовал эту логику в своих проектах, и она хорошо работает. спасибо :) – iPatel
Там довольно много. Проблема в том, что вы неявно конвертируете между типами данных. Это может привести к непредсказуемым значениям, например. когда у вас есть 'float' из 3.5 конвертирования в' int', результат может быть 4, если он раундов, но, скорее всего, он преобразует его в 3 по мере его обрезания. Вы хотите быть максимально последовательными с типами данных, которые вы используете, и если вам нужно преобразовать, то делайте это явно и по уважительным причинам. Не возражаете, если я отредактирую ваш ответ, чтобы показать, что это должно быть? –