gpt4 book ai didi

iphone - 如何为 alpha 蒙版图像创建位图上下文?

转载 作者:行者123 更新时间:2023-12-03 21:19:18 25 4
gpt4 key购买 nike

我想在代码中绘制 alpha 蒙版图像。现在我做的是:

1) 使用 CGBitmapContextCreate 以及选项 CGColorSpaceCreateDeviceRGBkCGImageAlphaPremultipliedFirst 创建位图上下文。

2) 然后我在这个上下文中绘制,仅使用白色和黑色等灰度颜色。

3) 然后,我使用 CGImageMaskCreate 从该上下文创建一个 mask 图像。

结论:我浪费了很多内存!因为根据我的理解,掩模图像只是灰度,对吧?那么为什么首先要在 ARGB 中创建上下文呢?

如何创建用于绘制 mask 图像的 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?我必须为 CGBitmapContextCreate 中的每个组件的位数提供什么?

CGColorSpaceGetNumberOfComponents(),但它仅报告组件的数量。这并没有告诉我一个组件有多少字节。

另外让我紧张的是 48 是硬编码在我上面的代码中的。谁说每个组件总是 4 字节,谁说每个组件总是 8 位?我只是从那里的各种示例代码中获取了这个。每个人似乎都这样做。有用。但 future 的证明?可能不是。

你会给我一些很棒的答案,让我开心。谢谢。

<小时/>

编辑:我找到了一个代码片段,但它很困惑:

CGColorSpaceRef colorSpace2 = CGColorSpaceCreateDeviceGray();
CGContextRef gradientBitmapContext = CGBitmapContextCreate (NULL, 1, reflectRect.size.height,8, 0, colorSpace2, kCGImageAlphaNone);

为什么每行字节数为 0?文档没有说你可以传递 0。看起来不对。

最佳答案

这些参数告诉系统如何处理您提供的数据或内存。您自己创建了它,因此您知道自己想要什么布局。系统可能想在幕后用它做什么(如果有的话)并不是您眼前的问题。

在这种情况下,您将为每个样本提供 8 位,仅包含 1 个组件,并且可能不想使用任何行填充,在这种情况下,您的 bytesPerRow 确实应该与图像宽度。

关于iphone - 如何为 alpha 蒙版图像创建位图上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403704/

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