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]];
ただし、このコードは次のようになります。
線の交点で発生する明るい領域があることに注意してください。グリッドパターン内にいくらかランダムに配置された十字は、パターンのエッジの影響を受けていないときに明るい領域がまだ発生するかどうかをテストするために配置されました(実際に発生します)。
私が緩和したいのは、線の交差点にあるこれらの明るい領域です。ある種の目の錯覚を使って誤ってだまされていないことを確認するために、線の中央と交差点のピクセルの色を確認しました。
緑の線の中点のピクセル値:
- R:0
- G:129
- B:0
2本の緑色の線の交点のピクセル値:
- R:0
- G:191
- B:0
ブレンディングモードに関するAppleCoreGraphicsのドキュメントを確認し、デフォルトのブレンディングモードがkCGBlendModeNormal
、で色をペイントするときにalpha = 1
「背景を完全に覆い隠す」必要があること、および以前にペイントした色であることを確認しました。これはデフォルトのブレンディングモードですが、上記のコードで明示的に設定しましたが、それでもこれらの明るい正方形が表示されます。
代わりに私が期待しているのは、おそらくRGBプロファイルを使用して、均一な緑色の線を表示することです。
- R:0
- G:255
- B:0
私は何が欠けていますか?