<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codec &#187; UIImage</title>
	<atom:link href="http://www.trembl.org/codec/tag/uiimage/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.trembl.org/codec</link>
	<description>A Personal Polylogic Code/Decode &#039;Zettelkasten&#039;</description>
	<lastBuildDate>Thu, 02 Feb 2012 03:38:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Resizing an UIImage</title>
		<link>http://www.trembl.org/codec/581/</link>
		<comments>http://www.trembl.org/codec/581/#comments</comments>
		<pubDate>Sat, 01 May 2010 10:21:55 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Categories]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[resize]]></category>
		<category><![CDATA[scale]]></category>
		<category><![CDATA[size]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=581</guid>
		<description><![CDATA[Nice and simple Category to resize an UIImage @interface UIImage &#40;Resize&#41; &#160; - &#40;UIImage*&#41;scaleToSize:&#40;CGSize&#41;size; &#160; @end #import &#34;UIImageResize.h&#34; #import &#60;CoreGraphics/CoreGraphics.h&#62; &#160; @implementation UIImage &#40;Resize&#41; &#160; - &#40;UIImage*&#41;scaleToSize:&#40;CGSize&#41;size &#123; &#160; UIGraphicsBeginImageContext&#40;size&#41;; &#160; &#91;self drawInRect:CGRectMake&#40;0, 0, size.width, size.height&#41;&#93;; &#160; UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext&#40;&#41;; &#160; UIGraphicsEndImageContext&#40;&#41;; &#160; return scaledImage; &#125; &#160; @end]]></description>
			<content:encoded><![CDATA[<p>Nice and simple Category to resize an UIImage</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> UIImage <span style="color: #002200;">&#40;</span>Resize<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>scaleToSize<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CGSize<span style="color: #002200;">&#41;</span>size;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;UIImageResize.h&quot;</span>
<span style="color: #6e371a;">#import &lt;CoreGraphics/CoreGraphics.h&gt;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> UIImage <span style="color: #002200;">&#40;</span>Resize<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>scaleToSize<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CGSize<span style="color: #002200;">&#41;</span>size <span style="color: #002200;">&#123;</span>
&nbsp;
	UIGraphicsBeginImageContext<span style="color: #002200;">&#40;</span>size<span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>self drawInRect<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, size.width, size.height<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
	UIImage<span style="color: #002200;">*</span> scaledImage <span style="color: #002200;">=</span> UIGraphicsGetImageFromCurrentImageContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	UIGraphicsEndImageContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #a61390;">return</span> scaledImage;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/581/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Layering one UIImage onto of another UIImage</title>
		<link>http://www.trembl.org/codec/569/</link>
		<comments>http://www.trembl.org/codec/569/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:15:45 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Categories]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[Category]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[overlay]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/569/</guid>
		<description><![CDATA[Combining two images, especially useful, if the overlay image has an alpha value: // // UIImage+Category.h // ImageOverlay // // Created by Georg Tremmel on 29/04/2010. // &#160; #import &#60;Foundation/Foundation.h&#62; &#160; &#160; @interface UIImage &#40;combine&#41; &#160; - &#40;UIImage*&#41;overlayWith:&#40;UIImage*&#41;overlayImage; &#160; @end And the implementation file. // // UIImage+Category.m // ImageOverlay // // Created by Georg Tremmel [...]]]></description>
			<content:encoded><![CDATA[<p>Combining two images, especially useful, if the overlay image has an alpha value:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">//</span>
<span style="color: #11740a; font-style: italic;">//  UIImage+Category.h</span>
<span style="color: #11740a; font-style: italic;">//  ImageOverlay</span>
<span style="color: #11740a; font-style: italic;">//</span>
<span style="color: #11740a; font-style: italic;">//  Created by Georg Tremmel on 29/04/2010.</span>
<span style="color: #11740a; font-style: italic;">//</span>
&nbsp;
<span style="color: #6e371a;">#import &lt;Foundation/Foundation.h&gt;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@interface</span> UIImage <span style="color: #002200;">&#40;</span>combine<span style="color: #002200;">&#41;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>overlayWith<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>overlayImage;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>And the implementation file.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">//</span>
<span style="color: #11740a; font-style: italic;">//  UIImage+Category.m</span>
<span style="color: #11740a; font-style: italic;">//  ImageOverlay</span>
<span style="color: #11740a; font-style: italic;">//</span>
<span style="color: #11740a; font-style: italic;">//  Created by Georg Tremmel on 29/04/2010.</span>
<span style="color: #11740a; font-style: italic;">//</span>
&nbsp;
<span style="color: #6e371a;">#import &quot;UIImage+Category.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> UIImage <span style="color: #002200;">&#40;</span>combine<span style="color: #002200;">&#41;</span>
&nbsp;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>overlayWith<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>overlayImage <span style="color: #002200;">&#123;</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">// size is taken from the background image</span>
	UIGraphicsBeginImageContext<span style="color: #002200;">&#40;</span>self.size<span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>self drawAtPoint<span style="color: #002200;">:</span>CGPointZero<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>overlayImage drawAtPoint<span style="color: #002200;">:</span>CGPointZero<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">/*
	// If Image Artifacts appear, replace the &quot;overlayImage drawAtPoint&quot; , method with the following
	// Yes, it's a workaround, yes I filed a bug report
	CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
	[overlayImage drawInRect:imageRect blendMode:kCGBlendModeOverlay alpha:0.999999999];
	*/</span>
&nbsp;
	UIImage <span style="color: #002200;">*</span>combinedImage <span style="color: #002200;">=</span> UIGraphicsGetImageFromCurrentImageContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
	UIGraphicsEndImageContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #a61390;">return</span> combinedImage;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>An update to 334 <a href="http://www.trembl.org/codec/334/">Combining Images with UIImage &#038; CGContext – (Offscreen drawing)</a></p>
<p>(Did I say, how much I love Categories&#8230;?)</p>
<p><strong>Update</strong><br />
I came across some strange behaviour when layering a PNG image with transparency over another image. Did not show up in the Simulator, only in iPhone 3GS (and probably also on other devices.)<br />
The base image draws fine, but the overlay image appears to be truncated and the last pixels shifted, producing some bright green artifacts.<br />
Changing</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>overlayImage drawAtPoint<span style="color: #002200;">:</span>CGPointZero<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>to</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">CGRect imageRect <span style="color: #002200;">=</span> CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">0</span>, <span style="color: #2400d9;">0</span>, self.size.width, self.size.height<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#91;</span>overlayImage drawInRect<span style="color: #002200;">:</span>imageRect blendMode<span style="color: #002200;">:</span>kCGBlendModeOverlay alpha<span style="color: #002200;">:</span><span style="color: #2400d9;">1.0</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>did not really help; the green artifacts remainded. It was strange though, that they did not appear in the other blendmodes. Using</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">CGContextDrawImage<span style="color: #002200;">&#40;</span>c, imageRect, <span style="color: #002200;">&#91;</span>overlayImage CGImage<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;</pre></div></div>

<p>would also work, but then the images turn up upside down. Not what I really needed. (Yes, I know, there might not be a hard fix for that, but really &#8211; it should be that complicated.)</p>
<p>After playing a bit more with the values, I found, that setting alpha lower than 1.0 gets rid of the display artifact:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>overlayImage drawInRect<span style="color: #002200;">:</span>imageRect blendMode<span style="color: #002200;">:</span>kCGBlendModeOverlay alpha<span style="color: #002200;">:</span><span style="color: #2400d9;">0.9999999</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>Bug filed at Apple&#8217;s Bug Report, let&#8217;s see. Or maybe am I missing something here?</p>
<p>Anyway here they the files are, zipped and ready for <a href="http://www.trembl.org/codec/wp-content/uploads/2010/04/UIImage+Category.zip">download</a>.</p>
<p><strong>Post Scriptum</strong></p>
<p><a href="http://www.trembl.org/codec/wp-content/uploads/2010/04/Artifact.zip">Test Project</a>, showing the visual artifact in action. Only appears on the device, NOT IN THE SIMULATOR.</p>
<p><img src="http://www.trembl.org/codec/wp-content/uploads/2010/04/UIButtons+iPhone.png" width="414" height="770"  /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/569/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIImage → pixelData → UIImage Rountrip</title>
		<link>http://www.trembl.org/codec/347/</link>
		<comments>http://www.trembl.org/codec/347/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 06:17:30 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Raw]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[CGImageRef]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[NSData]]></category>
		<category><![CDATA[pixel]]></category>
		<category><![CDATA[pixel value]]></category>
		<category><![CDATA[Quartz]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=347</guid>
		<description><![CDATA[The questions is rather simple: How to manipulate single pixels of an UIImage? The answer is rather long; but includes a joyful trip into Quartz 2D Graphic land&#8230; // load image, convert to CGImageRef UIImage *c = &#91;UIImage imageNamed:@&#34;c.png&#34;&#93;; CGImageRef cRef = CGImageRetain&#40;c.CGImage&#41;; &#160; // png alpha to mask NSData* pixelData = &#40;NSData*&#41; CGDataProviderCopyData&#40;CGImageGetDataProvider&#40;cRef&#41;&#41;; // [...]]]></description>
			<content:encoded><![CDATA[<p>The questions is rather simple: How to manipulate single pixels of an UIImage?<br />
The answer is rather long; but includes a joyful trip into Quartz 2D Graphic land&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// load image, convert to CGImageRef</span>
UIImage <span style="color: #002200;">*</span>c <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageNamed<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;c.png&quot;</span><span style="color: #002200;">&#93;</span>;
CGImageRef cRef <span style="color: #002200;">=</span> CGImageRetain<span style="color: #002200;">&#40;</span>c.CGImage<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// png alpha to mask</span>
<span style="color: #400080;">NSData</span><span style="color: #002200;">*</span> pixelData <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSData</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> CGDataProviderCopyData<span style="color: #002200;">&#40;</span>CGImageGetDataProvider<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #11740a; font-style: italic;">// image raw data</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//NSData* pixelDataRep = UIImagePNGRepresentation(c);</span>
<span style="color: #11740a; font-style: italic;">// compressed png data</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;pixelData %i&quot;, [pixelData length]);</span>
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;pixelDataRep %i&quot;, [pixelDataRep length]);</span>
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;pixelDataRep equal to pixelData: %@&quot;, [pixelData isEqualToData:pixelDataRep] ? @&quot;YES&quot; : @&quot;NO&quot;);</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//UIImage* newImage = [UIImage imageWithData:pixelData];</span>
<span style="color: #11740a; font-style: italic;">//[newImage drawInRect:CGRectMake(10, 340, 65, 65)];</span>
&nbsp;
&nbsp;
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;pixelData %@&quot;, pixelData);</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">char</span><span style="color: #002200;">*</span> pixelBytes <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span>pixelData bytes<span style="color: #002200;">&#93;</span>;
<span style="color: #11740a; font-style: italic;">// return pointer to data</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// step through char data</span>
<span style="color: #a61390;">for</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; i &lt; <span style="color: #002200;">&#91;</span>pixelData length<span style="color: #002200;">&#93;</span>; i <span style="color: #002200;">+=</span> <span style="color: #2400d9;">4</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// change accordingly</span>
	pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span>;
	pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;
	pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;
	pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">3</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">=</span> <span style="color: #2400d9;">255</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #11740a; font-style: italic;">//1ms in Simulator , 5ms on iPhone 3GS , 65x65 pixel</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// copy bytes in new NSData</span>
<span style="color: #400080;">NSData</span><span style="color: #002200;">*</span> newPixelData <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSData</span> dataWithBytes<span style="color: #002200;">:</span>pixelBytes length<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>pixelData length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;newPixelData %@&quot;, newPixelData);</span>
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;newPixelData: %@&quot;, newPixelData ? @&quot;ok&quot; : @&quot;nil&quot;);</span>
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;newPixelData equal to pixelData: %@&quot;, [pixelData isEqualToData:newPixelData] ? @&quot;YES&quot; : @&quot;NO&quot;);</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// cast NSData as CFDataRef</span>
CFDataRef imgData <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>CFDataRef<span style="color: #002200;">&#41;</span>pixelData;
&nbsp;
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;CFDataGetLength %i&quot;, CFDataGetLength(imgData) );</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">// Make a data provider from CFData</span>
	CGDataProviderRef imgDataProvider <span style="color: #002200;">=</span> CGDataProviderCreateWithCFData<span style="color: #002200;">&#40;</span>imgData<span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #11740a; font-style: italic;">// testing... create data provider from file.... works</span>
	<span style="color: #11740a; font-style: italic;">//NSString* imageFileName = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@&quot;c.png&quot;];</span>
	<span style="color: #11740a; font-style: italic;">//CGDataProviderRef imgDataProvider = CGDataProviderCreateWithFilename([imageFileName UTF8String]);</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// does not work like that</span>
<span style="color: #11740a; font-style: italic;">// new image needs to get PNG properties</span>
<span style="color: #11740a; font-style: italic;">//CGImageRef throughCGImage = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// get PNG properties from cRef</span>
<span style="color: #a61390;">size_t</span> width <span style="color: #002200;">=</span> CGImageGetWidth<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
<span style="color: #a61390;">size_t</span> height <span style="color: #002200;">=</span> CGImageGetHeight<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
<span style="color: #a61390;">size_t</span> bitsPerComponent <span style="color: #002200;">=</span> CGImageGetBitsPerComponent<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
<span style="color: #a61390;">size_t</span> bitsPerPixel <span style="color: #002200;">=</span> CGImageGetBitsPerPixel<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
<span style="color: #a61390;">size_t</span> bytesPerRow <span style="color: #002200;">=</span> CGImageGetBytesPerRow<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
CGColorSpaceRef colorSpace <span style="color: #002200;">=</span> CGImageGetColorSpace<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
CGBitmapInfo info <span style="color: #002200;">=</span> CGImageGetBitmapInfo<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
CGFloat <span style="color: #002200;">*</span>decode <span style="color: #002200;">=</span> <span style="color: #a61390;">NULL</span>;
<span style="color: #a61390;">BOOL</span> shouldInteroplate <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;
CGColorRenderingIntent intent <span style="color: #002200;">=</span> CGImageGetRenderingIntent<span style="color: #002200;">&#40;</span>cRef<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// cRef PNG properties + imgDataProvider's data</span>
CGImageRef throughCGImage <span style="color: #002200;">=</span> CGImageCreate<span style="color: #002200;">&#40;</span>width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, info, imgDataProvider, decode, shouldInteroplate, intent<span style="color: #002200;">&#41;</span>;
CGDataProviderRelease<span style="color: #002200;">&#40;</span>imgDataProvider<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;c %i, throughCGImage: %i&quot;, CGImageGetHeight(cRef), CGImageGetHeight(throughCGImage) );</span>
CGImageRelease<span style="color: #002200;">&#40;</span>throughCGImage<span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// make UIImage with CGImage</span>
UIImage<span style="color: #002200;">*</span> newImage <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageWithCGImage<span style="color: #002200;">:</span>throughCGImage<span style="color: #002200;">&#93;</span>;
<span style="color: #11740a; font-style: italic;">//NSLog(@&quot;newImage: %@&quot;, newImage);</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// draw UIImage</span>
<span style="color: #002200;">&#91;</span>newImage drawInRect<span style="color: #002200;">:</span>CGRectMake<span style="color: #002200;">&#40;</span><span style="color: #2400d9;">10</span>, <span style="color: #2400d9;">340</span>, <span style="color: #2400d9;">65</span>, <span style="color: #2400d9;">65</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>References:<br />
- <a href="http://iphoneincubator.com/blog/tag/cgimageref">http://iphoneincubator.com/blog/tag/cgimageref</a><br />
- <a href="http://www.nixwire.com/getting-uiimage-to-work-with-nscoding-encodewithcoder/">http://www.nixwire.com/getting-uiimage-to-work-with-nscoding-encodewithcoder/</a><br />
- <a href="http://developer.apple.com/mac/library/qa/qa2007/qa1509.html">http://developer.apple.com/mac/library/qa/qa2007/qa1509.html</a><br />
- <a href="http://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more">http://stackoverflow.com/questions/1282830/uiimagepickercontroller-uiimage-memory-and-more</a><br />
<strong>- <a href="http://lists.apple.com/archives/Quartz-dev/2008//Aug/msg00073.html">http://lists.apple.com/archives/Quartz-dev/2008//Aug/msg00073.html</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/347/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accessing RGBA Pixel Data</title>
		<link>http://www.trembl.org/codec/338/</link>
		<comments>http://www.trembl.org/codec/338/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 07:20:41 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Raw]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[Mask]]></category>
		<category><![CDATA[NSData]]></category>
		<category><![CDATA[pixel value]]></category>
		<category><![CDATA[RGBA]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=338</guid>
		<description><![CDATA[NSData* pixelData = &#40;NSData*&#41; CGDataProviderCopyData&#40;CGImageGetDataProvider&#40;c.CGImage&#41;&#41;; unsigned char* pixelBytes = &#40;unsigned char *&#41;&#91;pixelData bytes&#93;; for&#40;int i = 0; i &#60; &#91;pixelData length&#93;; i += 4&#41; &#123; NSLog&#40;@&#34;pixelBytes[i] R:%i G:%i B:%i A:%i &#34;, &#40;int&#41;pixelBytes&#91;i&#93;, &#40;int&#41;pixelBytes&#91;i+1&#93;, &#40;int&#41;pixelBytes&#91;i+2&#93;, &#40;int&#41;pixelBytes&#91;i+3&#93;&#41;; /* pixelBytes[i] = pixelBytes[i+3]; pixelBytes[i+1] = pixelBytes[i+3]; pixelBytes[i+2] = pixelBytes[i+3]; pixelBytes[i+3] = 0; */ &#125; NSData* newPixelData = &#91;NSData dataWithBytes:pixelBytes [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #400080;">NSData</span><span style="color: #002200;">*</span> pixelData <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSData</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> 
	CGDataProviderCopyData<span style="color: #002200;">&#40;</span>CGImageGetDataProvider<span style="color: #002200;">&#40;</span>c.CGImage<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">char</span><span style="color: #002200;">*</span> pixelBytes <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">unsigned</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span>pixelData bytes<span style="color: #002200;">&#93;</span>;
<span style="color: #a61390;">for</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; i &lt; <span style="color: #002200;">&#91;</span>pixelData length<span style="color: #002200;">&#93;</span>; i <span style="color: #002200;">+=</span> <span style="color: #2400d9;">4</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;pixelBytes[i] R:%i G:%i B:%i A:%i &quot;</span>, 
		<span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">&#93;</span>, 
		<span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>, 
		<span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>,
		<span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>pixelBytes<span style="color: #002200;">&#91;</span>i<span style="color: #002200;">+</span><span style="color: #2400d9;">3</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
		<span style="color: #11740a; font-style: italic;">/*
		pixelBytes[i] = pixelBytes[i+3];
		pixelBytes[i+1] = pixelBytes[i+3];
		pixelBytes[i+2] = pixelBytes[i+3];
		pixelBytes[i+3] = 0;
		 */</span>
    <span style="color: #002200;">&#125;</span>
	<span style="color: #400080;">NSData</span><span style="color: #002200;">*</span> newPixelData <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSData</span> dataWithBytes<span style="color: #002200;">:</span>pixelBytes length<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span>pixelData length<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
	UIImage<span style="color: #002200;">*</span> newImage <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>UIImage imageWithData<span style="color: #002200;">:</span>newPixelData<span style="color: #002200;">&#93;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/338/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Combining Images with UIImage &amp; CGContext &#8211; (Offscreen drawing)</title>
		<link>http://www.trembl.org/codec/334/</link>
		<comments>http://www.trembl.org/codec/334/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 09:25:49 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Raw]]></category>
		<category><![CDATA[add]]></category>
		<category><![CDATA[combine]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[layer]]></category>
		<category><![CDATA[lockFocus]]></category>
		<category><![CDATA[NSImage]]></category>
		<category><![CDATA[offscreen]]></category>
		<category><![CDATA[Quartz]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=334</guid>
		<description><![CDATA[In Cocoa NSImage has a lockFocus method, that allows to draw images offscreen and combine them into one. &#91;img lockFocus&#93;; //... &#91;img unlockFocus&#93;; On the iPhone, UIImage lacks the lockFocus methods, instead the following: // Create new offscreen context with desired size UIGraphicsBeginImageContext&#40;CGSizeMake&#40;64.0f, 64.0f&#41;&#41;; &#160; // draw img at 0,0 in the context &#91;img drawAtPoint:CGPointZero&#93;; [...]]]></description>
			<content:encoded><![CDATA[<p>In Cocoa NSImage has a lockFocus method, that allows to draw images offscreen and combine them into one.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>img lockFocus<span style="color: #002200;">&#93;</span>;
<span style="color: #11740a; font-style: italic;">//...</span>
<span style="color: #002200;">&#91;</span>img unlockFocus<span style="color: #002200;">&#93;</span>;</pre></div></div>

<p>On the iPhone, UIImage lacks the lockFocus methods, instead the following:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Create new offscreen context with desired size</span>
UIGraphicsBeginImageContext<span style="color: #002200;">&#40;</span>CGSizeMake<span style="color: #002200;">&#40;</span>64.0f, 64.0f<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// draw img at 0,0 in the context</span>
<span style="color: #002200;">&#91;</span>img drawAtPoint<span style="color: #002200;">:</span>CGPointZero<span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// draw another at 0,0 in the context, maybe with an alpha value</span>
<span style="color: #002200;">&#91;</span>another drawAtPoint<span style="color: #002200;">:</span>CGPointZero<span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// ... and other operations</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// assign context to UIImage</span>
UIImage <span style="color: #002200;">*</span>outputImg <span style="color: #002200;">=</span> UIGraphicsGetImageFromCurrentImageContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// end context</span>
UIGraphicsEndImageContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/334/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIImage &amp; cache</title>
		<link>http://www.trembl.org/codec/16/</link>
		<comments>http://www.trembl.org/codec/16/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 02:19:52 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Raw]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[memory leak]]></category>
		<category><![CDATA[NSBundle]]></category>
		<category><![CDATA[UIImage]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=16</guid>
		<description><![CDATA[&#91;UIImage imageNamed:@&#34;image.jpg&#34;&#93; caches image for lifetime of app. &#91;UIImage imageWithContentsOfFile:&#91;&#91;NSBundle mainBundle&#93; pathForResource:@&#34;image&#34; ofType:@&#34;png&#34;&#93;&#93; no caching, always loaded from memory. after caching, faster display problem, running out of memory]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #009900;">&#91;</span>UIImage imageNamed<span style="color: #339933;">:</span>@<span style="color: #ff0000;">&quot;image.jpg&quot;</span><span style="color: #009900;">&#93;</span></pre></div></div>

<p>caches image for lifetime of app.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">&#91;</span>UIImage imageWithContentsOfFile<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> pathForResource<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;image&quot;</span> ofType<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;png&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span></pre></div></div>

<p>no caching, always loaded from memory.</p>
<p>after caching, faster display<br />
problem, running out of memory</p>
]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/16/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

