title: Convert image to grayscale
body: <p>I am trying to convert an image into grayscale in the following way:</p>
  
  <pre><code>#define bytesPerPixel 4
  #define bitsPerComponent 8
  
  -(unsigned char*) getBytesForImage: (UIImage*)pImage
  {
      CGImageRef image = [pImage CGImage];
      NSUInteger width = CGImageGetWidth(image);
      NSUInteger height = CGImageGetHeight(image);
  
      NSUInteger bytesPerRow = bytesPerPixel * width;
  
      CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
      unsigned char *rawData = malloc(height * width * 4);
      CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
      CGColorSpaceRelease(colorSpace);
  
      CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
      CGContextRelease(context);
  
      return rawData;
  }
  
  -(UIImage*) processImage: (UIImage*)pImage
  {   
      DebugLog(@"processing image");
      unsigned char *rawData = [self getBytesForImage: pImage];
  
      NSUInteger width = pImage.size.width;
      NSUInteger height = pImage.size.height;
  
      DebugLog(@"width: %d", width);
      DebugLog(@"height: %d", height);
  
      NSUInteger bytesPerRow = bytesPerPixel * width;
  
      for (int xCoordinate = 0; xCoordinate &lt; width; xCoordinate++)
      {
          for (int yCoordinate = 0; yCoordinate &lt; height; yCoordinate++)
          {
              int byteIndex = (bytesPerRow * yCoordinate) + xCoordinate * bytesPerPixel;
  
              //Getting original colors
              float red = ( rawData[byteIndex] / 255.f );
              float green = ( rawData[byteIndex + 1] / 255.f );
              float blue = ( rawData[byteIndex + 2] / 255.f );
  
              //Processing pixel data
              float averageColor = (red + green + blue) / 3.0f;
  
              red = averageColor;
              green = averageColor;
              blue = averageColor;
  
              //Assigning new color components
              rawData[byteIndex] = (unsigned char) red * 255;
              rawData[byteIndex + 1] = (unsigned char) green * 255;
              rawData[byteIndex + 2] = (unsigned char) blue * 255;
  
  
          }
      }
  
      NSData* newPixelData = [NSData dataWithBytes: rawData length: height * width * 4];
      UIImage* newImage = [UIImage imageWithData: newPixelData];
  
      free(rawData);
  
      DebugLog(@"image processed");
  
      return newImage;
  
  }
  </code></pre>
  
  <p>So when I want to convert an image I just call processImage:</p>
  
  <pre><code>imageToDisplay.image = [self processImage: image];
  </code></pre>
  
  <p>But imageToDisplay doesn't display. What may be the problem?</p>
  
  <p>Thanks.</p>