By Jeff LaMarche on November 29, 2010
Happy Thanksgiving, and sorry for the relative lack of posts here lately. Things are crazier than ever and it’s been a challenge finding time to shower, let alone blog.
I do have something to share, today, though. No, it’s not the next chapter of OpenGL ES 2.0 for iOS. It’s a category that some of you may find useful: a method that allows you to draw only part of a UIImage rather than the entire thing.
On the Mac, NSImage has a handy instance method called drawInRect:fromRect:operation:fraction: that lets you specify exactly which part of an image to draw. On UIImage, we’ve only got the ability to draw the entire image either unless we drop down to Core Graphics calls. We don’t have a nice, easy, convenient way using just UIImage to draw a portion of the image it represents.
I needed this ability in an application I’m working on, so I hacked out the following category. At first glance, this may look to be inefficient, since we’re making a copy of the instance’s backing CGImage in order to create the sub-image, however I believe that CGImageCreateWithImageInRect() references the original image’s bitmap data. I haven’t confirmed that it doesn’t make a copy of the bitmap data, but the documentation certainly seems to imply it. Anyone know?
Anyway, here is the category; I’ve even commented the code more pedantically than is normal for me in case anyone might be confused about what’s going on. Improvements and bug fixes are, as always, welcome.