2013-05-15 76 views

回答

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; 

}

+0

尋找一個解決方案自己。似乎有一個可通過JavaScript API設置的不透明選項(請參閱http://stackoverflow.com/questions/11132537/google-map-v3-png-groundoverlay-opacity),但我還沒有弄清楚如何訪問它通過iOS API。 – Phil