我正在尝试使用 Core Graphics 在黑色背景上绘制一个简单的网格图案。网格线将是绿色的。我目前正在图像上下文中创建和绘制,然后使用生成的图像来图案化我的视图背景:
CGFloat gridSize = 45;
UIGraphicsBeginImageContext(CGSizeMake(gridSize, gridSize));
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(ctx);
// Create black background fill.
CGContextSetFillColorWithColor(ctx, [[UIColor colorWithRed:0.0
green:0.0
blue:0.0
alpha:1.0] CGColor]);
CGContextMoveToPoint(ctx, 0, 0);
CGContextAddLineToPoint(ctx, gridSize, 0);
CGContextAddLineToPoint(ctx, gridSize, gridSize);
CGContextAddLineToPoint(ctx, 0, gridSize);
CGContextAddLineToPoint(ctx, 0, 0);
CGContextFillPath(ctx);
// Set context variables for line drawing.
CGContextSetBlendMode(ctx, kCGBlendModeNormal);
CGContextSetStrokeColorWithColor(ctx, [[UIColor colorWithRed:0.0
green:1.0
blue:0.0
alpha:1.0] CGColor]);
CGContextSetLineWidth(ctx, 1);
// Draw top and bottom grid lines.
CGContextMoveToPoint(ctx, 0, 0);
CGContextAddLineToPoint(ctx, gridSize, 0);
CGContextMoveToPoint(ctx, gridSize, gridSize);
CGContextAddLineToPoint(ctx, 0, gridSize);
CGContextStrokePath(ctx);
// Draw left and right grid lines.
CGContextMoveToPoint(ctx, gridSize, 0);
CGContextAddLineToPoint(ctx, gridSize, gridSize);
CGContextMoveToPoint(ctx, 0, gridSize);
CGContextAddLineToPoint(ctx, 0, 0);
CGContextStrokePath(ctx);
// Draw a "cross" in the center of the image to troubleshoot blending.
CGContextMoveToPoint(ctx, 20, 20);
CGContextAddLineToPoint(ctx, 40, 20);
CGContextStrokePath(ctx);
CGContextMoveToPoint(ctx, 30, 10);
CGContextAddLineToPoint(ctx, 30, 30);
CGContextStrokePath(ctx);
UIGraphicsPopContext();
UIImage *gridImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Set background color to a pattern based on the drawn image.
[self setBackgroundColor:[[UIColor alloc] initWithPatternImage:gridImage]];
但是,此代码会导致以下结果:
请注意,在任何线的交点处都会出现较亮的区域。稍微随机放置在网格图案中的十字架被放在那里只是为了测试在不受图案边缘影响时是否仍然出现明亮区域(它们确实如此)。
我希望缓解的正是线路交叉点上的这些明亮区域。为了确保我没有不小心使用某种视觉错觉来欺骗自己,我检查了线条中间以及它们交叉处的像素颜色。
绿线中点的像素值:
- 回复:0
- 克:129
- 乙:0
两条绿线相交处的像素值:
- 回复:0
- 克:191
- 乙:0
我检查了有关混合模式的Apple Core Graphics文档,并确定默认混合模式是kCGBlendModeNormal
,当使用 绘制颜色时alpha = 1
,它应该“完全遮盖背景”以及任何以前绘制的颜色。虽然这是默认的混合模式,但我仍然在上面的代码中明确设置它,但我仍然看到这些明亮的方块。
我希望看到的是统一绿色的线条,大概是 RGB 配置文件:
- 回复:0
- 克:255
- 乙:0
我错过了什么?