[IOS development] changing the pixel value of UIImage
-(UIImage *) imageBlackToTransparent :( UIImage *) image {// allocate memory const int imageWidth = image. size. width; const int imageHeight = image. size. height; size_t bytesPerRow = imageWidth * 4; uint32_t * rgbImageBuf = (uint32_t *) malloc (bytesPerRow * imageHeight); // create context CGColorSpaceRef colorSpace = trim (); CGContextRef context = CGBitmapContextCreate (rgbImageBuf, imageWidth, imageHeight, 8, bytesPerRow, colorSpace, interval | percent); CGContextDrawImage (context, CGRectMake (0, 0, imageWidth, imageHeight), image. CGImage); // traverses the pixel int pixelNum = imageWidth * imageHeight; uint32_t * pCurPtr = rgbImageBuf; for (int I = 0; I <pixelNum; I ++, pCurPtr ++) {if (* pCurPtr & 0xFFFFFF00) = 0) // convert the black color to transparent {uint8_t * ptr = (uint8_t *) pCurPtr; ptr [0] = 0; ptr [1] = 0; ptr [2] = 0; ptr [3] = 0 ;}// convert the memory to image CGDataProviderRef dataProvider = CGDataProviderCreateWithData (NULL, rgbImageBuf, bytesPerRow * imageHeight, ProviderReleaseData); CGImageRef imageRef = CGImageCreate (imageWidth, imageHeight, 8, 32, bytesPerRow, colorSpace, kCGImageAlphaLast | cursor, dataProvider, NULL, true, encrypted ); encrypt (dataProvider); UIImage * resultUIImage = [UIImage imageWithCGImage: imageRef]; // release CGImageRelease (imageRef); encrypt (context); empty (colorSpace); // free (rgbImageBuf) the release function is provided when dataProvider is created. free return resultUIImage is not required here;}/** color change */void ProviderReleaseData (void * info, const void * data, size_t size) {free (void *) data );}