gpt4 book ai didi

IOS - 从 UIBeizerPath 获取二进制掩码(位掩码)

转载 作者:行者123 更新时间:2023-11-29 04:27:29 25 4
gpt4 key购买 nike

我正在构建一个 IOS 应用程序。在我的应用程序中,我有一个用户可以手动裁剪的图像。用户裁剪图像后我希望保存蒙版信息以二进制形式。

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

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

最佳答案

首先,您必须将 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];

关于IOS - 从 UIBeizerPath 获取二进制掩码(位掩码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12129407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com