如何将本地 jpeg 或 png 图像文件加载到 iPhone 应用程序中?

Posted

技术标签:

【中文标题】如何将本地 jpeg 或 png 图像文件加载到 iPhone 应用程序中?【英文标题】:How do you load a local jpeg or png image file into an iPhone app? 【发布时间】:2010-06-23 17:07:33 【问题描述】:

或者我应该问为什么这对我来说如此困难?答案可能是我是 iPhone 开发的新手,我正试图放弃我的旧方法并踏入未来的新平台。从头到尾,我对这个过程有几个问题......

    如果我创建一个 .png 图像,它在我的项目目录(即我的计算机的硬盘驱动器)中的什么位置?我可以将它放在硬盘上的任何位置,当我将它加载到 Xcode 中时,Xcode 会将它复制到正确的位置吗? 一旦它存在于我的硬盘上,如何将它添加到我的 Xcode 项目中?我可以将文件拖到“组和文件”树中的任何文件夹中吗? 一旦我把它拖到 Xcode 中,我想在弹出的复制文件对话框中使用什么复制设置?将项目复制到目标组的文件夹复选框?参考类型?递归地为添加的文件夹创建组? .png 图像正确添加到我的项目后,将其放入 CGImageRef 的最简单方法是什么?该文档显示了一个使用 CGImageCreateWithPNGDataProvider 辅助方法的示例,但表示 ios SDK 不支持它。我想使用 CGImageRef 将图像重复绘制到位图上下文中。

提前非常感谢,对于这个冗长的问题,我深表歉意,我很惊讶与其他一些平台相比,这是一个如此复杂的过程。

【问题讨论】:

【参考方案1】:

如果你加载到 UIImage 中,你可以得到一个 CGImageReg:

    UIImage *image = [UIImage imageNamed:@"image.png"];
CGImageRef imageRef = [image CGImage];

【讨论】:

【参考方案2】:

1) 它可以放在 Groups & Files 中的任何位置,但如果您只有几个,我建议您将它粘贴到 Resources 组中。请记住,组和文件中的组与目录结构中的实际文件夹不匹配。它们只是为了组织您的文件而存在。

2) 只需将其拖入“组和文件”窗格即可。

3) 我会使用“复制”选项。当您链接到不同项目使用的共享资源时,不复制它通常很有用。

4) 我自己没有使用过 CGImageRef,但是如果你只想要一个 UIImage,你可以简单地调用它的imageNamed: 类方法并指定图像名称,而不需要任何额外的路径。假定该文件将与您的应用程序的主包相关。

【讨论】:

【参考方案3】:

1 & 2) 你可以把它放在你硬盘上的任何地方(只要你不移动或删除它。那么你需要更新 XCode 中的引用)。在 XCode 中,您可能希望通过右键单击左侧模型树并从菜单中选择它来为您的图像创建一个“组”。然后再次右键单击并转到“添加”->“现有文件或文件夹”并选择 png 文件。如果您不小心将它添加到错误的组中,您可以在 XCode 模型树中拖动它。您还可以将文件从 Finder 窗口拖放到 XCode 中的组中。

3) 您可以只使用“默认”复制设置,而无需将其复制到项目中。引用就足够了,无需递归创建组。

4) 你想对图像做什么?您是否需要 png 文件中的 CGImageRef 或者您可以使用 UIImageViewUIImage 从文件中加载它,或者您可以将其放置在 Interface Builder (IB) 中。如果您详细说明您是如何使用图像的,也许我们可以为您提供帮助。

【讨论】:

谢谢,罗伯!我想使用 CGImageRef 将图像重复绘制到位图上下文中。【参考方案4】:

如果您有一个特定的图像或一组图像想要包含在应用程序中,您可以简单地将它们拖到项目中——我更喜欢资源部分——并使用 UIImage 按名称引用它们imageNamed" 用于初始化。

如果您尝试加载单个 iPhone 的本地图像,它使用不同的技术,但这似乎不是您所追求的。

我也是 iPhone 编程的新手,所以我希望这会有所帮助。

【讨论】:

【参考方案5】:

将图像放入包中然后运行此函数

NSString *localPath = [[NSBundle mainBundle]bundlePath];

NSString *imageName = [localPath stringByAppendingPathComponent:[[NSString alloc]initWithFormat:@"worldMapResized.png"]];

CGRect bgRect = CGRectMake(0, 0, 500, 500);

UIImageView *myBgView = [[UIImageView alloc] initWithFrame:bgRect];

[myBgView setImage:[UIImage imageWithContentsOfFile:imageName]];

[self.view addSubview:myBgView];

【讨论】:

【参考方案6】:

使用 XCODE:

如果您有一个 UIImage 对象(此处名为 buttonScan)位于您的 XIB 文件中并在您的 .h 文件中引用,在您的 .m 文件的 viewDidLoad 中,您可以使用此代码来引用您调用的图像文件buttonScan01a.png(您使用 FILE > ADD FILES TO ... 将其导入项目中...

buttonScan.image = [UIImage imageNamed:@"buttonScan01a.png"];
[buttonScan sizeToFit];

【讨论】:

以上是关于如何将本地 jpeg 或 png 图像文件加载到 iPhone 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用干预图像laravel将webp图像转换为jpeg或png

如何才能将jpg格式的图片转化成png格式的

如何将 png/jpeg 文件集成到统一移动应用程序项目中

是否可以将 jpeg(或 png)类型的图像设置为 exe(C++)?

在 iOS 上从两个 jpeg 加载 RGBA 图像 - OpenGL ES 2.0

GDAL:Python GDAL.Translate可以将TIFF文件转换为JPEG或PNG数组 - 而不是写入文件吗?