gpt4 book ai didi

iphone - iPhone 上的 CoreGraphics。加载带有预乘 Alpha 的 PNG 文件的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 19:38:02 28 4
gpt4 key购买 nike

对于我的 iPhone 3D 应用程序,我目前使用 CoreGraphics 加载具有预乘 Alpha 的 png 文件。以下是要点:

// load a 4-channel rgba png file with pre-multiplied alpha. 
CGContextRef context =
CGBitmapContextCreate(data, width, height, 8, num_channels * width, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

// Draw the image into the context
CGRect rect = CGRectMake(0, 0, width, height);
CGContextDrawImage(context, rect, image);
CGContextRelease(context);

然后我继续将数据用作 OpenGL 中的纹理。

我的问题:通过指定预乘 alpha - kCGImageAlphaPremultipliedLast - 我是否 - 无意中 - 告诉 CoreGraphics 将 r g b channel 乘以 alpha 或者 - 我所假设的 - 我是否只是表明传入图像的格式已预乘乘以阿尔法?

谢谢,道格

最佳答案

By specifying pre-multiplied alpha - kCGImageAlphaPremultipliedLast - am I - inadvertently - telling CoreGraphics to multiply the r g b channels by alpha or - what I have assumed - am I merely indicating that the format of the incoming image has pre-multiplied alpha?

都不是。您指定了目标(上下文)的格式,而不是源的格式。源(图像对象)知道其像素的颜色是否经过预乘,当将源图像绘制到上下文中时,Quartz 将使用该知识来执行正确的操作。

这意味着缓冲区中的像素将被预乘,而不是两次,但它们将在上下文缓冲区中预乘,无论源颜色是否被预乘(如果是,则不需要再次繁殖;如果没有,那么它将第一次繁殖)。

我对 OpenGL 的了解不够,无法知道这是否是一个问题,如果是的话,这段代码可能没有解决方案:至少在 Mac 上,Quartz does not support unpremultiplied colors in bitmap contexts .

您可以尝试this storage format相反。

关于iphone - iPhone 上的 CoreGraphics。加载带有预乘 Alpha 的 PNG 文件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2538147/

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