我想在代码中绘制一个 alpha 蒙版图像。现在我做:
CGBitmapContextCreate
1) 使用with optionsCGColorSpaceCreateDeviceRGB
和创建位图上下文kCGImageAlphaPremultipliedFirst
。
2)然后我绘制到这个上下文中,只使用像白色和黑色这样的灰度颜色。
3)然后我从该上下文创建一个蒙版图像,使用CGImageMaskCreate
.
结论:我浪费了很多内存!因为据我了解,蒙版图像只有灰度,对吗?那么为什么首先在 ARGB 中创建上下文。
如何创建用于绘制蒙版图像的 CGContextRef?我的想法是使用CGColorSpaceCreateDeviceGray
,但问题从这里开始。这是我创建 ARGB 位图上下文的确切代码:
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
uint32_t * bitmapData;
int imageWidth = round(size.width);
int imageHeight = round(size.height);
int bitmapBytesPerRow = (imageWidth * 4);
int bitmapByteCount = (bitmapBytesPerRow * imageHeight);
colorSpace = CGColorSpaceCreateDeviceRGB();
bitmapData = malloc(bitmapByteCount);
context = CGBitmapContextCreate(bitmapData,
imageWidth,
imageHeight,
8, // bits per component
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorSpace);
我不知道如何计算bitmapBytesPerRow
这样的上下文。我想这只是imageWidth
?我必须提供bits per component
什么CGBitmapContextCreate
?
有,CGColorSpaceGetNumberOfComponents()
但它只报告组件的数量。这并不能告诉我一个组件有多少字节。
另外让我感到紧张的是,4
和8
在我上面的代码中是硬编码的。谁说每个组件总是 4 个字节,谁说每个组件是 8 位?我只是从那里的各种示例代码中获取的。每个人似乎都这样做。有用。但未来的证明?可能不是。
你会给我一些很好的答案。谢谢。
编辑:我找到了一个代码片段,但它令人困惑:
CGColorSpaceRef colorSpace2 = CGColorSpaceCreateDeviceGray();
CGContextRef gradientBitmapContext = CGBitmapContextCreate (NULL, 1, reflectRect.size.height,8, 0, colorSpace2, kCGImageAlphaNone);
为什么每行字节数为 0?文档没有说你可以通过 0。看起来不对。