2012-08-26 52 views
0

我正在构建一个IOS应用程序。 在我的应用程序中,我有一个用户可以手动裁剪的图像。 用户裁剪图像后,我希望将掩码信息 保存为二进制格式。IOS - 从UIBeizerPath获取二进制掩码(位掩码)

我需要它作为一个二进制图像,不仅作为NSCoding表格, ,因为我需要使用其他平台上的掩码信息 (不仅仅是IOS)。

如何将UIBezierPath转换为二进制掩码数组。

回答

1

首先,您必须栅格化(描边/填充)您的UIBeizerPath到您的图像上下文,然后您可以使用它的栅格数据进行操作。这里是一个如何光栅化UILabel的例子:

UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, siz.w, siz.h)]; 
label.text = [[NSString alloc] ... ]; 
label.font = [UIFont boldSystemFontOfSize: ... ]; 

UIGraphicsBeginImageContext(label.frame.size); 
[label.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage* layerImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

// Get Image size 
GLuint width = CGImageGetWidth(layerImage.CGImage); 
GLuint height = CGImageGetHeight(layerImage.CGImage); 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

// Allocate memory for image 
void *imageData = malloc(height * width * 4); 
CGContextRef imgcontext = CGBitmapContextCreate(
               imageData, width, height, 8, 4 * width, colorSpace, 
               kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Little); 
CGColorSpaceRelease(colorSpace); 
CGContextClearRect(imgcontext, 
        CGRectMake(0, 0, width, height)); 
CGContextTranslateCTM(imgcontext, 0, height - height); 
CGContextDrawImage(imgcontext, 
        CGRectMake(0, 0, width, height), layerImage.CGImage); 

// Create image 

[.. here you can do with imageData whatever you want ..] 

image.InitImage(imageData, width * height * 4, width, height, iResource_Image::ImgFormat_RGBA32); 



// Release context 
CGContextRelease(imgcontext); 
free(imageData); 
[label release];