【问题标题】:Two ways to put image into graphics context - which is better?将图像放入图形上下文的两种方法 - 哪个更好?
【发布时间】:2011-01-22 06:50:53
【问题描述】:

我注意到将图像放入核心图形的两种方法的示例。一个比另一个简单得多。那么第二种更复杂的方法有什么优势呢?是不是更快?

示例 1

UIImage *myImage = [UIImage imageNamed:@"picture.png"];
CGRect imageRect = CGRectMake(70, 330, 40, 40);
[myImage drawInRect:imageRect];
[myImage release];

示例 2

// Load image from application bundle
NSString* imageFileName = [[[NSBundle mainBundle] resourcePath]         stringByAppendingPathComponent:@"picture.png"];
CGDataProviderRef provider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, true,      kCGRenderingIntentDefault);
CGDataProviderRelease(provider);

// Draw image
CGContextTranslateCTM(context, 70, 370 );
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, 40, 40), image);
CGImageRelease(image);

【问题讨论】:

    标签: iphone objective-c cocoa-touch uikit core-graphics


    【解决方案1】:

    直接比较两者,第二种方法的优点是不会将图片放入+[UIImage imageNamed:]缓存中。您无法从该缓存中删除图像,因此最好不要使用imageNamed:

    但是,您可以两全其美。

    首先,使用-[NSBundle URLForResource:withExtension:] 获取图片的URL。这简化了获取资源目录路径或 URL 并将文件名附加到它自己的步骤。

    其次,使用+[UIImage imageWithContentsOfURL:] 创建图像,传递您从 NSBundle 获得的 URL。

    从那里,继续您的第一个示例。总共只有五行(其中两行替换了第一个示例的第一行)。

    【讨论】:

      【解决方案2】:

      在示例 1 中,您将在视图中按原样显示图像,显示静态图像也很好。

      但在示例 2 中,您使用核心图形来显示图像,因此您可以对其进行更多操作,而不仅仅是静态图像。你可以旋转它、缩放它、平移它、减少它的 alpha 值等等,我也不知道。

      所以这取决于您的使用选择。无论您是想只显示图像还是希望它做更多的事情。如果您是初学者并且想要开发实用程序应用程序,我认为您不会使用 2 选项。但如果你想开发游戏或想为图像制作动画,你将使用 should 2 选项。

      干杯

      【讨论】:

        【解决方案3】:

        我不知道第二种方式有什么好处。它的缺点是有更多的步骤。如果您使用第一种方式并且有一个 UIImage 并且您需要一个 CGImageRef 您可以通过 CGImage 属性访问它。我发现自己最常使用第一个。当你有一个 UIImage 时,你可以使用你自己的 UIImageView 将它添加到视图层次结构中,或者你可以将它直接分配给一些 UIKit 对象,例如 UITableViewCell 的 imageView。如果你得到 CGImageRef (第二种方式),那么你需要 imageWithCGImage: first...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-02
          • 1970-01-01
          • 2020-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-05
          相关资源
          最近更新 更多