title: EAGLView to UIImage color conversion issue
body: <p>I have an EAGLView (taken from Apple's examples) which I can successfully convert to a UIImage using this code:</p>
  
  <pre><code>- (UIImage *)glToUIImage:(CGSize)size {
  
  NSInteger backingWidth = size.width;
  NSInteger backingHeight = size.height;
  
  NSInteger myDataLength = backingWidth * backingHeight * 4;
  
  // allocate array and read pixels into it.
  GLuint *buffer = (GLuint *) malloc(myDataLength);
  glReadPixels(0, 0, backingWidth, backingHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
  
  // gl renders “upside down” so swap top to bottom into new array.
  for(int y = 0; y &lt; backingHeight / 2; y++) {
      for(int x = 0; x &lt; backingWidth; x++) {
          //Swap top and bottom bytes
          GLuint top = buffer[y * backingWidth + x];
          GLuint bottom = buffer[(backingHeight - 1 - y) * backingWidth + x];
          buffer[(backingHeight - 1 - y) * backingWidth + x] = top;
          buffer[y * backingWidth + x] = bottom;
      }
  }
  
  // make data provider with data.
  CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, myDataLength, releaseScreenshotData);
  
  // prep the ingredients
  const int bitsPerComponent = 8;
  const int bitsPerPixel = 4 * bitsPerComponent;
  const int bytesPerRow = 4 * backingWidth;
  CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
  CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
  CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
  
  // make the cgimage
  CGImageRef imageRef = CGImageCreate(backingWidth, backingHeight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, YES, renderingIntent);
  CGColorSpaceRelease(colorSpaceRef);
  CGDataProviderRelease(provider);
  
  // then make the UIImage from that
  UIImage *myImage = [UIImage imageWithCGImage:imageRef];
  CGImageRelease(imageRef);
  
  return myImage;
  
  }
  
  void releaseScreenshotData(void *info, const void *data, size_t size) {
  free((void *)data);
  };
  </code></pre>
  
  <p>And here is the code where I use this method to convert to a UIImage:</p>
  
  <pre><code>EAGLView *newView = [[EAGLView alloc] initWithImage:photo.originalImage];
  
  [newView reshapeFramebuffer];
  [newView drawView:theSlider.tag value:theSlider.value];
  //the two lines above are how EAGLViews in Apple's examples are modified
  
  
  photoItem *newPhoto = [[photoItem alloc] initWithImage:[self glToUIImage:photo.originalImage.size]];
  </code></pre>
  
  <p>The problem I am having is, sometimes the converted UIImage won't have the same colors as the EAGLView. This occurs if I apply a high saturation to the EAGLView, or high brigtness, or low contrast, and some other cases. For example, if I apply a high saturation to the EAGLView, and then convert to UIImage, some parts of the image will be brighter than what it's suppose to be.</p>
  
  <p>So I discovered that the problem was a EAGLView timing issue in disguise, similar to my previous question here (<a href="https://stackoverflow.com/questions/7047639/eaglview-to-uiimage-timing-question">EAGLView to UIImage timing question</a>).</p>