CGImageRef 到 UIImage 旋转我在模拟器或设备中的 iOS 4 上调试的照片

Posted

技术标签:

【中文标题】CGImageRef 到 UIImage 旋转我在模拟器或设备中的 iOS 4 上调试的照片【英文标题】:CGImageRef to UIImage rotates my photos debugging on a iOS 4 in simulator or device 【发布时间】:2010-07-13 14:23:11 【问题描述】:

我对一些简单的代码有疑问。使用相机拍摄或拍摄的照片会被旋转。起初我以为这是 UIView 中的设置,但是当我使用 CGImageRef 将传入的 UIImage 复制到另一个 UIImage 时会发生这种情况。我这样做是因为这是确保我使用副本的最简单方法。如果我搞砸了,请更正此代码。

代码:

- (id)initWithImage:(UIImage *)image 
    if ((self = [super init]) && (image != nil)) 
        CGImageRef tmpImageRef = [image CGImage];
        puzzle = [[UIImage alloc] initWithCGImage:tmpImageRef];
    

    return self;

调试器:

    This GDB was configured as "--host=i386-apple-darwin --target=arm-apple-darwin".tty /dev/ttys001
Loading program into debugger…
sharedlibrary apply-load-rules all
Program loaded.
target remote-mobile /tmp/.XcodeGDBRemote-25694-49
Switching to remote-macosx protocol
mem 0x1000 0x3fffffff cache
mem 0x40000000 0xffffffff none
mem 0x00000000 0x0fff none
run
Running…
[Switching to thread 11523]
[Switching to thread 11523]
Re-enabling shared library breakpoint 1
Re-enabling shared library breakpoint 2
continue
2010-07-13 15:09:17.159 Golovomka[693:307] Using two-stage rotation animation. To use the smoother single-stage animation, this application must remove two-stage method implementations.
2010-07-13 15:09:17.172 Golovomka[693:307] Using two-stage rotation animation is not supported when rotating more than one view controller or view controllers not the window delegate
Current language:  auto; currently objective-c
(gdb) print (CGSize)[image size]
$1 = 
  width = 1536, 
  height = 2048

(gdb) n
28                  puzzle = [[UIImage alloc] initWithCGImage:tmpImageRef];
(gdb)
31          return self;
(gdb) print (CGSize)[puzzle size]
$2 = 
  width = 2048,
  height = 1536

(gdb)

第一个打印在 CGIMageRef 实例化行上。感激地收到任何帮助。正如我所说,这不会在模拟器中发生,只有在我将代码部署到真实设备时才会发生。 请注意这篇文章曾经说过问题只发生在设备上的调试而不是模拟器中。从那以后,我将用我的 iphone 3gs 上的相机拍摄的照片复制到模拟器中,并且发生了完全相同的问题。因此,如果您周围有一张 2048x1536 的图片,您应该可以在 sim 卡中复制它。

【问题讨论】:

【参考方案1】:

UIImage 有一个方向属性,当您从 UIImage 中提取 CGImage 时会忽略该属性。你应该这样做:

if (self = [super init]) 
    puzzle = image; 

【讨论】:

这确实保留了方向。我刚刚发现这篇帖子***.com/questions/1260249/… 涵盖了类似的事情。当我在代码崩溃之前这样做时,我认为这是因为稍后会发布图像。现在情况似乎并非如此,所以当我在谷歌上搜索解决方案时,我一定搞砸了其他东西,我使用了 imageref 方法;我认为这对于现代语言来说有点废话。谢谢! 作为后来在开发中的进一步说明,我确实最终适当地翻译和旋转图像以消除此问题,因为在不同的库和系统中处理方向数据变得很痛苦。例如核心图形,opencv,位操作。

以上是关于CGImageRef 到 UIImage 旋转我在模拟器或设备中的 iOS 4 上调试的照片的主要内容,如果未能解决你的问题,请参考以下文章

CGImageRef cg = [[UIImage imageNamed: Path] CGImage];需要 CGImageRelease(cg)'?

如何从上下文绘制的图像中获取 CGImageRef?

imageWithCG图像和内存

截取UIImage指定大小区域

UIImage 在裁剪后被旋转

从 Filemanager 加载时 UIImage 自动旋转