title: How to get the pixel color on touch?
body: <p>I know this is a common question and there are a lot of answers of this question. I've used some of this. Although many of them are the same. But the sad thing for me is that none of them worked for me. The following codes i've used till now.</p>
  
  <pre><code>-(void)getRGBAsFromImage:(UIImage*)image atX:(int)xx andY:(int)yy
  {
      // First get the image into your data buffer
      CGImageRef imageRef = [image CGImage];
      NSUInteger width = CGImageGetWidth(imageRef);
      NSUInteger height = CGImageGetHeight(imageRef);
      CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
      unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
      NSUInteger bytesPerPixel = 4;
      NSUInteger bytesPerRow = bytesPerPixel * width;
      NSUInteger bitsPerComponent = 8;
      CGContextRef context = CGBitmapContextCreate(rawData, width, height,
                                                   bitsPerComponent, bytesPerRow, colorSpace,
                                                   kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
      CGColorSpaceRelease(colorSpace);
  
      CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
      CGContextRelease(context);
  
      // Now your rawData contains the image data in the RGBA8888 pixel format.
      int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
  
      CGFloat red   = (rawData[byteIndex]     * 1.0) / 255.0;
      CGFloat green = (rawData[byteIndex + 1] * 1.0) / 255.0;
      CGFloat blue  = (rawData[byteIndex + 2] * 1.0) / 255.0;
      CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;
      byteIndex += 4;
      NSLog(@"the vale of the rbg of red is %f",red);
  
      demoColor.tintColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
      free(rawData);
  }
  </code></pre>
  
  <p>Here is another approach i've used -</p>
  
  <pre><code>- (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef) inImage {
  
      CGContextRef    context = NULL;
      CGColorSpaceRef colorSpace;
      void *          bitmapData;
      int             bitmapByteCount;
      int             bitmapBytesPerRow;
  
      // Get image width, height. We'll use the entire image.
      size_t pixelsWide = CGImageGetWidth(inImage);
      size_t pixelsHigh = CGImageGetHeight(inImage);
  
      // Declare the number of bytes per row. Each pixel in the bitmap in this
      // example is represented by 4 bytes; 8 bits each of red, green, blue, and
      // alpha.
      bitmapBytesPerRow   = (pixelsWide * 4);
      bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);
  
      // Use the generic RGB color space.
      //colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
      colorSpace = CGColorSpaceCreateDeviceRGB();
      if (colorSpace == NULL)
      {
          fprintf(stderr, "Error allocating color space\n");
          return NULL;
      }
  
      // Allocate memory for image data. This is the destination in memory
      // where any drawing to the bitmap context will be rendered.
      bitmapData = malloc( bitmapByteCount );
      if (bitmapData == NULL)
      {
          fprintf (stderr, "Memory not allocated!");
          CGColorSpaceRelease( colorSpace );
          return NULL;
      }
  
      // Create the bitmap context. We want pre-multiplied ARGB, 8-bits
      // per component. Regardless of what the source image format is
      // (CMYK, Grayscale, and so on) it will be converted over to the format
      // specified here by CGBitmapContextCreate.
      context = CGBitmapContextCreate (bitmapData,
                                       pixelsWide,
                                       pixelsHigh,
                                       8,      // bits per component
                                       bitmapBytesPerRow,
                                       colorSpace,
                                       kCGImageAlphaPremultipliedFirst);
      if (context == NULL)
      {
          free (bitmapData);
          fprintf (stderr, "Context not created!");
      }
  
      // Make sure and release colorspace before returning
      CGColorSpaceRelease( colorSpace );
  
      return context;
  }
  
  
  - (UIColor*) getPixelColorAtLocation:(CGPoint)point {
      UIColor* color = nil;
      //CGImageRef inImage = self.image.CGImage;
      CGImageRef inImage = [AppDelegate getInstance].capturedImage.CGImage;
      // Create off screen bitmap context to draw the image into. Format ARGB is 4 bytes for each pixel: Alpa, Red, Green, Blue
      CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
      if (cgctx == NULL) { return nil; /* error */ }
  
      size_t w = CGImageGetWidth(inImage);
      size_t h = CGImageGetHeight(inImage);
      CGRect rect = {{0,0},{w,h}}; 
  
      // Draw the image to the bitmap context. Once we draw, the memory
      // allocated for the context for rendering will then contain the
      // raw image data in the specified color space.
      CGContextDrawImage(cgctx, rect, inImage); 
  
      // Now we can get a pointer to the image data associated with the bitmap
      // context.
      unsigned char* data = CGBitmapContextGetData (cgctx);
      if (data != NULL) {
          //offset locates the pixel in the data from x,y.
          //4 for 4 bytes of data per pixel, w is width of one row of data.
          int offset = 4*((w*round(point.y))+round(point.x));
          int alpha =  data[offset];
          int red = data[offset+1];
          int green = data[offset+2];
          int blue = data[offset+3];
          NSLog(@"offset: %i colors: RGB A %i %i %i  %i",offset,red,green,blue,alpha);
          color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:(blue/255.0f) alpha:(alpha/255.0f)];
      }
  
      // When finished, release the context
      CGContextRelease(cgctx);
      // Free image data memory for the context
      if (data) { free(data); }
  
      return color;
  }
  </code></pre>
  
  <p>But none of these has been worked for me. Please help me out to work with this. Is there anything i'm missing ?</p>
  
  <p>I have 2 UIImageView in my UI. The one which is in back contains the image from which i need to pick the color of a pixel that is touched. And the other UIImageView is to paint over the back image with the picked color.</p>
  
  <p>Please help. Any help will be very much appreciated.</p>