<?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; alpha</title>
	<atom:link href="http://www.trembl.org/codec/tag/alpha/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>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>Transparent Background of Custom Drawing Class</title>
		<link>http://www.trembl.org/codec/361/</link>
		<comments>http://www.trembl.org/codec/361/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 07:38:19 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Raw]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[opaque]]></category>
		<category><![CDATA[transparent]]></category>
		<category><![CDATA[UIView]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=361</guid>
		<description><![CDATA[Usually common problems already have simple solution. Like that one: Problem You subclassed UIView, you want to do some custom drawing in drawRect, but no matter what you do or where you draw, the background of the view remains black. - &#40;void&#41;drawRect:&#40;CGRect&#41;rect &#123; // Drawing code CGContextRef context = UIGraphicsGetCurrentContext&#40;&#41;; CGContextSetRGBFillColor&#40;context, 0.0, 0.0, 1.0, 1.0&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Usually common problems already have simple solution. Like that one:</p>
<p><strong>Problem</strong><br />
You subclassed UIView, you want to do some custom drawing in drawRect, but no matter what you do or where you draw, the background of the view remains black.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>drawRect<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CGRect<span style="color: #002200;">&#41;</span>rect <span style="color: #002200;">&#123;</span>
 <span style="color: #11740a; font-style: italic;">// Drawing code</span>
 CGContextRef context <span style="color: #002200;">=</span> UIGraphicsGetCurrentContext<span style="color: #002200;">&#40;</span><span style="color: #002200;">&#41;</span>;
 CGContextSetRGBFillColor<span style="color: #002200;">&#40;</span>context, <span style="color: #2400d9;">0.0</span>, <span style="color: #2400d9;">0.0</span>, <span style="color: #2400d9;">1.0</span>, <span style="color: #2400d9;">1.0</span><span style="color: #002200;">&#41;</span>;
 CGContextFillEllipseInRect<span style="color: #002200;">&#40;</span>context, rect<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p><strong>Solution</strong><br />
In the ViewController, which call the drawing class, add</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">myDrawingClass.opaque <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;</pre></div></div>

<p>- or even nicer. In the drawing class&#8217; init function:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;">self.opaque <span style="color: #002200;">=</span> <span style="color: #a61390;">NO</span>;</pre></div></div>

<p><del datetime="2010-01-25T07:38:22+00:00"><strong>And not like that</strong><br />
- adding &#8220;self.opaque = NO;&#8221; in the drawRect: function<br />
- CGContextClearRect(context, rect);<br />
- CGContextSetAlpha(context, 0.5f);</del></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/361/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>Adding Alpha Blending Mode to Quartz Composer</title>
		<link>http://www.trembl.org/codec/128/</link>
		<comments>http://www.trembl.org/codec/128/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 06:41:27 +0000</pubDate>
		<dc:creator>Georg Tremmel</dc:creator>
				<category><![CDATA[Raw]]></category>
		<category><![CDATA[alpha]]></category>
		<category><![CDATA[blending mode]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[qc]]></category>

		<guid isPermaLink="false">http://www.trembl.org/codec/?p=128</guid>
		<description><![CDATA[Courtesy of Kineme. http://kineme.net/QuartzComposerPatches/GLTools/1.1]]></description>
			<content:encoded><![CDATA[<p>Courtesy of Kineme.</p>
<p><a href="http://kineme.net/QuartzComposerPatches/GLTools/1.1">http://kineme.net/QuartzComposerPatches/GLTools/1.1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.trembl.org/codec/128/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

