在iOS上的图像中查找非透明填充的CGRect

时间:2015-04-06 09:26:26

标签: ios objective-c swift

我的iOS应用程序上有一些部分透明的图像(格式为PNG)。

我可以在图像上找到非透明区域的CGRect区域吗?

App Preview

1 个答案:

答案 0 :(得分:1)

我不知道任何可以开箱即用的功能。 但是你可以编写自己的函数。您需要做的就是逐个获取像素的颜色,并确定它们是否构成矩形。

要获得此功能,您可以使用以下代码。

CGImageRef image = [myUIImage CGImage];
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = malloc(height * width * 4);
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));
CGContextRelease(context);

// Now your rawData contains the image data in the RGBA8888 pixel format.
int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
red = rawData[byteIndex];
green = rawData[byteIndex + 1];
blue = rawData[byteIndex + 2];
alpha = rawData[byteIndex + 3];

最初发布于此question.