Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIImage在重新缩放时会颠倒-有时_Ios_Uiimageview_Uiimage_Core Graphics_Uiimagepickercontroller - Fatal编程技术网

Ios UIImage在重新缩放时会颠倒-有时

Ios UIImage在重新缩放时会颠倒-有时,ios,uiimageview,uiimage,core-graphics,uiimagepickercontroller,Ios,Uiimageview,Uiimage,Core Graphics,Uiimagepickercontroller,这个很奇怪 背景:我的iPad应用程序既支持横向,也不支持纵向。它使用UIImagePickerController拍照。拍摄完照片后,我在UICollectionView中将它们显示为小缩略图 首先,我注意到,当我在右方向拍摄时,一切都很好。然而,当我以横向向左方向拍摄照片,并将获得的图像应用到我的细胞的图像视图时,它显示为倒置 在搜索了一点之后,我找到了,它解决了我的问题。基本上,在横向左方向拍摄的照片将其图像方向属性设置为.Down。我使用了以下代码(switch语句): 到目前为止,一切

这个很奇怪

背景:我的iPad应用程序既支持横向,也不支持纵向。它使用UIImagePickerController拍照。拍摄完照片后,我在UICollectionView中将它们显示为小缩略图

首先,我注意到,当我在右方向拍摄时,一切都很好。然而,当我以横向向左方向拍摄照片,并将获得的图像应用到我的细胞的图像视图时,它显示为倒置

在搜索了一点之后,我找到了,它解决了我的问题。基本上,在横向左方向拍摄的照片将其
图像方向
属性设置为
.Down
。我使用了以下代码(
switch
语句):

到目前为止,一切都很好。

接下来,我想也许我最好存储一个更接近实际缩略图的原始图像的附加、调整大小的版本,以减少显示多个缩略图时的内存压力:在这里,我假设UIImage存储原始(大)图像,而不管它如何调整大小以适应视图的边界

因此,我使用以下代码生成缩略图:

    UIGraphicsBeginImageContextWithOptions(newSize, true, 0.0)
    image.drawInRect(CGRectMake(0, 0, newSize.width, newSize.height))
    let thumbnailImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
现在,缩略图也发生了同样的情况:在横向左侧拍摄时,它显示为上下颠倒(即使调整大小是基于已纠正方向的图像)。此外,相同的方向修复将不起作用:记录缩略图的
imageOrientation
属性表明它已设置为“.Up”

switch thumbnailImage.imageOrientation {
    case .Up, .UpMirrored:
        print("Thumb orientation is UP")
        // > THIS CASE ALWAYS RUNS
        break

    default:
        print("Thumb orientation is NOT UP")
        // > THIS CASE NEVER RUNS             
    }
上面的调整大小代码本质上不可能是错误的,因为它可以在一个设备方向上工作(横向右侧)!发生什么事了

也许我应该在固定原始图像的方向时强制垂直翻转缩略图?但这听起来像是黑客攻击


我不明白为什么在用新的方向复制原始图像(
.Down
固定到
.Up
)后,它会垂直显示,但该固定图像的大小调整副本不会(尽管继承了
.Up
方向)。

好的,找到了一个解决方法:先创建缩略图,然后固定(如有必要)原始图像和缩略图的方向(通过复制):

但是,与之前一样,缩略图重新定向的大小写从未执行过(缩略图方向从一开始就始终等于
.Up


我真的不明白这里发生了什么,但可能一些图像数据被引用到了某处而不是被复制,这会导致不一致。我一定是在规范中遗漏了一些细节…

好的,找到了一个解决方法:先创建缩略图,然后修复(如果必要)原始图像和缩略图的方向(通过复制):

但是,与之前一样,缩略图重新定向的大小写从未执行过(缩略图方向从一开始就始终等于
.Up

我真的不明白这里发生了什么,但可能一些图像数据被引用到了某个地方而不是被复制,这导致了不一致。我必须在规范中遗漏一些细节

switch thumbnailImage.imageOrientation {
    case .Up, .UpMirrored:
        print("Thumb orientation is UP")
        // > THIS CASE ALWAYS RUNS
        break

    default:
        print("Thumb orientation is NOT UP")
        // > THIS CASE NEVER RUNS             
    }
// Create thumbnail:

UIGraphicsBeginImageContextWithOptions(CGSizeMake(94, 76), true, 0.0)

image.drawInRect(CGRectMake(0, 0, 94, 76))

var thumbnailImage = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()


// Fix orientation:

switch image.imageOrientation {
case .Up, .UpMirrored:
    break

default:
    image = UIImage(CGImage: image.CGImage!, scale: 1.0, orientation: UIImageOrientation.Up)
}


let imageData = UIImagePNGRepresentation(image)


switch thumbnailImage.imageOrientation {
case .Up, .UpMirrored:
    break

default:
    thumbnailImage = UIImage(CGImage: thumbnailImage.CGImage!, scale: 1.0, orientation: UIImageOrientation.Up)
}

// (...use both images...)