2011-07-06 19 views
1

在我的应用程序一个UIImage的大小是(320460)关于产品旋转的UIImage

我创建使用

- (id)initWithCGImage:(CGImageRef)imageRef scale:(CGFloat)scale orientation:(UIImageOrientation)orientation 

我分配取向UIImageOrientationLeft另一个UIImage对象。

然后我打印新的UIImage对象的大小,结果是(460,320)。

它已经旋转到左侧了。

我需要将UIImage存储在我的文档目录中。

NSData *imageData = UIImagePNGRepresentation(rotateImageView); 
NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

[imageData writeToFile:[path stringByAppendingPathComponent:@"test.png"] atomically:NO];  

但是,当我从“test.png”

得到了UIImage对象它的大小变更为(320460),它旋转到其一部开拓创新的地位。

我想它可以存储在(460320)

我做出的一些错误?

谢谢!

回答

1

我也遇到过这个问题。当您在Apple代码中传递图像方向时,实际上不会旋转任何像素数据。相反,基本上存在与图像一起存储的枚举值。许多苹果的图像渲染器都足够聪明,可以读取此枚举值,并使用它来正确显示图像。所以你分享的代码片段只是改变这个枚举值。尊重此值的渲染器将显示您想要的内容,而许多其他渲染器将忽略它。

有几个解决方案可用。首先,如果您通过iOS显示图像,则可以使用UIImageView的transform属性以及CGAffineTransformMakeRotation来获取所需的方向。

其次,你实际上可以旋转原始像素数据,这可以这样实现:

How to rotate image file?

我建议第一个解决方案,因为它更容易代码,更高效。但是,如果您将在iOS之外共享这些图像,则第二种方法将提供更可靠的结果。