返回UIImage的副本而不是更改

时间:2013-04-17 21:26:33

标签: ios objective-c uiimage

我是iOS开发的新手,并且遇到了一些对我来说很奇怪的事情。我有以下方法来拍摄大图像并制作一个较小的版本,然后将它们上传到服务器:

- (void)prepareAndUploadImages
{
  UIImage *originalImage = self.imageView.image;
  UIImage *smallerImage = [originalImage resizedImageWithContentMode:UIViewContentModeScaleAspectFill bounds:CGSizeMake(1024.0, 768.0) interpolationQuality:1];
  [self uploadImage:originalImage withFilename:@"original.jpg"];
  [self uploadImage:smallerImage withFilename:@"smaller.jpg"];
}

这样可以很好地上传图像,但奇怪的是当它们落在服务器上时,"original.jpg"图像实际上是缩小的版本,"smaller.jpg"是全尺寸图像。

我正在使用UIImageCategories中的UIImage resizedImageWithContentMode:方法,它的返回如下所示:

return [self resizedImage:newSize interpolationQuality:quality];

它调用的resizedImage:interpolationQuality方法返回:

return [self resizedImage:newSize transform:transform drawTransposed:drawTransposed interpolationQuality:quality];

resizedImage:transform:...方法调用返回如下:

// Get the resized image from the context and a UIImage
CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:self.scale orientation:UIImageOrientationUp];

...

return newImage;

所以,我真的希望我的代码将smallerImage设置为这个新图像,该图像是作为原始图像上调用的方法的返回值而创建的,但是看起来行为就是原始图像图像被修改到位,但在它被修改到位之前它会返回self?我不知道,这看起来很奇怪。

任何人都可以向我解释这里发生了什么,以及如何修复我的代码以获得所需的行为?

1 个答案:

答案 0 :(得分:0)

想出来:

我认为原始图像实际上大于1024,但事实并非如此。然后发生了什么,大小是以POINTS而不是PIXELS给出的,所以我制作的“较小”图像实际上是对图像进行放大,而不是缩小图像。这就是让我失望的原因。

如果我将尺寸缩小一半,我会得到我正在寻找的像素尺寸。

感谢您的评论,他们帮助了!