当alpha非常小时,CGContext颜色会发生变化

时间:2015-05-20 17:32:31

标签: ios cgcontext

我正在制作一个绘画应用程序,并且在笔画的每个点上,画笔的宽度可以改变大小,并且alpha减少,好像画笔已用完了油漆。问题是,当alpha变得非常小时,颜色会发生变化。

一旦alpha低于.01,我开始在画笔笔划中获得颜色变化。我必须有这么低的alpha,因为在沿着线的每个像素我将画笔层叠加到上下文中并且当画笔用完油漆时获得所需的透明度时,alpha最终需要非常小。

以下是我将图层绘制到上下文中的代码:

    CGContextSaveGState(_cacheContext);
    CGContextSetAlpha(_cacheContext, _brushAlpha); // below .01 color starts to change
    CGContextDrawLayerAtPoint (_cacheContext, bottomLeft, _brushShapeLayer);
    CGContextRestoreGState(_cacheContext);

First color is correct the others are incorrect as the alpha gets lower

如果RGB颜色是一种颜色,例如(1,0,0),那么效果很好。但是当颜色是(.4,.6,.2)之类的东西时,当我看到颜色在低alpha值时发生变化。

感谢您的帮助!

*更新*

我尝试使用kCGBitmapFloatComponents,但收到错误:

  

不支持的像素描述 - 3个组件,每个组件32位,   128位/像素

我认为这意味着我无法在iOS中使用它,但也许我没有正确设置它。以下是我创建上下文的内容:

bitmapBytesPerRow = (self.frame.size.width * 8 * sizeof(float));
bitmapByteCount = (bitmapBytesPerRow * self.frame.size.height);

void* bitmap = malloc( bitmapByteCount );

CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast | kCGBitmapFloatComponents;
self.cacheContext = CGBitmapContextCreate (bitmap, self.frame.size.width, self.frame.size.height, 32, bitmapBytesPerRow, CGColorSpaceCreateDeviceRGB(), bitmapInfo);

我的部署目标设置为8.2

0 个答案:

没有答案