0

i added a groundoverlay to a mapview, and i found thoese ways to change the alpha of groundoverlay.icon. How to set the opacity/alpha of a UIImage? but it seems has no affect in the app, i still can not see the map or other groundoverlays behind the image. is there a solution to handle this?

Cœur
  • 37,241
  • 25
  • 195
  • 267

1 Answers1

0
+ (UIImage *) setImage:(UIImage *)image withAlpha:(CGFloat)alpha

{

// Create a pixel buffer in an easy to use format
CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

UInt8 * m_PixelBuf = malloc(sizeof(UInt8) * height * width * 4);

NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(m_PixelBuf, width, height,
                                             bitsPerComponent, bytesPerRow, colorSpace,
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);

//alter the alpha
int length = height * width * 4;
for (int i=0; i<length; i+=4)
{
    m_PixelBuf[i+3] =  255*alpha;
}


//create a new image
CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf, width, height,
                                         bitsPerComponent, bytesPerRow, colorSpace,
                                         kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGImageRef newImgRef = CGBitmapContextCreateImage(ctx);
CGColorSpaceRelease(colorSpace);
CGContextRelease(ctx);
free(m_PixelBuf);

UIImage *finalImage = [UIImage imageWithCGImage:newImgRef];
CGImageRelease(newImgRef);

return finalImage;

}

  • Looking for a solution myself. There appears to be an opacity option that's settable through the JavaScript API (see http://stackoverflow.com/questions/11132537/google-map-v3-png-groundoverlay-opacity) but I haven't figured out how to access it through the iOS API yet. – Phil Jun 21 '13 at 14:35