- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Cocos2D 中渲染自己的 Sprite 时遇到问题。如果我创建一个上下文,即使假设有一个预乘的 alpha,我也会得到黑色的人工制品。以下代码应生成一个完全白色的圆圈:
- (void)renderTest
{
CGRect rect = CGRectMake(0, 0.0, 100.0, 100.0);
unsigned char *data = calloc((int)rect.size.width * (int)rect.size.height, 4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(data, (int)rect.size.width, (int)rect.size.height, 8, (int)rect.size.width*4, colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextAddArc(context, rect.size.width / 2, rect.size.height / 2, rect.size.width * 0.4, 0.0, 2 * M_PI, 0);
CGContextFillPath(context);
CCTexture2D *tex = [[CCTexture2D alloc] initWithData:data pixelFormat:kCCTexture2DPixelFormat_RGBA8888 pixelsWide:rect.size.width pixelsHigh:rect.size.height contentSize:rect.size];
self.texture = tex;
self.textureRect = rect;
free(data);
CGContextRelease(context);
}
当放置在白色背景上时,它应该是不可见的。然而,实际上我明白了:
如果我在 UIKit 中使用 UIGraphicsGetCurrentContext()
做完全相同的事情,那么它可以完美地工作,没有黑色细线。
任何人都可以告诉我如何让它渲染 alpha channel 而没有狡猾的人工制品吗?
最佳答案
看起来渲染是使用不适合预乘颜色的 glBlendFunc
完成的。
有两个(半)选项可以解决这个问题:
将混合函数设置为 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
。我不知道这个 Cocos2D 的东西,也不知道你是否可以影响混合函数或以其他方式告诉它使用预乘颜色。
不要在位图上下文中使用预乘颜色。不过,我不确定生成的像素格式是否在 iOS 上受支持。
如果一切都是白色的,您可以将 data
的 RGB 部分设置为 0xFFFFFF,并在创建纹理之前将 alpha 保留在适当的位置。
编辑:这是将纹理中的所有内容都涂成白色的代码:
uint32_t *ptr = (uint32_t *)data;
void *end = data + CGBitmapContextGetBytesPerRow(context) * CGBitmapContextGetHeight(context);
while (ptr != end)
*ptr++ |= 0xffffff; // or 0xffffff00, depending on endianess and pixel format in context
关于ios - 为什么我在 Cocos2D 中的 32 位上下文周围有一条黑线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406551/
我在 UISearchBar 的上方和下方出现了一些奇怪的黑线,我不太确定如何摆脱它们。将 UISearchBar 的样式设置为最小可以解决该问题,但它没有我想要的背景颜色。 知道是什么原因造成的吗?
在Firefox中,全屏模式下屏幕上方有一条1PX的黑线。 有什么办法可以用网站CSS代码去掉吗? 最佳答案 将以下代码片段添加到 your userChrome.css file使 1px 黑线完全
当在我的 View Controller (导航项中嵌入了大标题和搜索栏)上执行推/弹出转换时,黑线会短暂出现,如下所示: 我基本上尝试过更改所有与导航栏颜色相关的东西,但没有任何帮助。 任何帮助将不
我是一名优秀的程序员,十分优秀!