gpt4 book ai didi

iPhone/Xcode : UIImage and UIImageView won't get with the program

转载 作者:行者123 更新时间:2023-12-03 20:34:35 24 4
gpt4 key购买 nike

从 iPhone 照片库中选取图像后,我尝试在 iPhone 文档目录中保存和加载 UIImage。它可以这样做,但由于某种原因,当我加载图像时,它会逆时针旋转 90 度。这是我的 saveImage 和 loadImage 方法:

保存图像:

- (void)saveImage: (UIImage*)image{
if (image != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"lePhoto.png"] ];
//NSData* data = UIImagePNGRepresentation(image);
//[data writeToFile:path atomically:YES];
[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
}
}

加载图片:

- (NSData*)loadImage{

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* path = [documentsDirectory stringByAppendingPathComponent:
[NSString stringWithString: @"lePhoto.png"] ];
NSData *data = [[NSData alloc] initWithContentsOfFile:path];


//UIImage *image = [[UIImage alloc] initWithData:data]; //my second try
//UIImage* image = [UIImage imageWithContentsOfFile:path]; //first try
//return image;
return data;
[data release];
}

我现在正在加载这样的图像,看看它是否会出于某种疯狂的原因解决我的问题(显然没有):

UIImage* theImage = [[UIImage alloc] initWithData:[self loadImage]];

我做了一些测试,我有两个并排的 UIImageView,左侧的一个在显示前不会保存和加载图像(一旦从图像中选取照片,它就会直接显示图像) ImagePicker),右侧的一个在保存加载发生后显示。右边的是唯一一个逆时针旋转90度的;非保存/加载图片显示正确。这只发生在实际的 iPhone 上。模拟器正确显示两个图像。我花了很多很多时间试图弄清楚,但无济于事。关于可能导致此问题的任何想法?

编辑:还应该知道,图像总是说它是朝上的,即使它显然不是朝上的!它仅在所有代码运行后才会轮换。我尝试在代码之间进行强制重绘,看看是否会改变事情,但事实并非如此(尽管我什至可能做错了。谁知道呢)。此外,它不会自动旋转从 iPhone 截图的照片。仅相机拍摄的照片。 [我还没有尝试过下载照片。]这是最奇怪的事情......

如果你想知道我到底是如何绘制图片的,这里的方法至少可以阐明我正在做的事情(显然,这并不是执行此功能所需的所有方法,但它提供了洞察力)关于我如何编写代码):

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
theimageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
[self saveImage:[info objectForKey:@"UIImagePickerControllerOriginalImage"]];
[picker dismissModalViewControllerAnimated:YES];
}

非常感谢任何建议。我确实知道这一点:如果有一种方法可以做一些疯狂的事情来解决一些愚蠢的、从未听说过的问题,那么很可能,我会找到它,显然:P

最佳答案

好的。我想到了。显然,当您使用 PNG 表示形式而不是 JPEG 表示形式保存内容时,图像方向信息不会随之保存。因此,加载的每个图像将默认显示方向向上。因此,最简单的方法是这样做:

NSData* data = UIImageJPEGRepresentation(image,0.0);
[data writeToFile:path atomically:YES];

而不是这个:

[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];

当然,将所有图片名称从 .png 更改为 .jpg。上面代码的0.0部分是控制Alpha级别,这是jpeg所需要的。希望这对将来的人有帮助!

关于iPhone/Xcode : UIImage and UIImageView won't get with the program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com