Đây là loại ném cùng nhau, nhưng đó là cách tiếp cận tôi có thể sẽ thực hiện. Điều này tạo ra một gradient góc bằng cách vẽ nó trực tiếp vào một bitmap bằng cách sử dụng một số trig đơn giản, sau đó cắt nó thành một vòng tròn. Tôi tạo ra một mạng lưới bộ nhớ bằng cách sử dụng một không gian màu xám, tính toán góc từ một điểm cho đến trung tâm, và sau đó màu sắc dựa trên một hàm tuần hoàn, chạy từ 0 đến 255. Bạn có thể mở rộng điều này để làm màu RGBA. .
Tất nhiên bạn sẽ lưu bộ nhớ cache này và chơi với toán để có được màu bạn muốn. Điều này hiện đang chạy tất cả các cách từ màu đen sang màu trắng, mà không nhìn tốt như bạn muốn.
![](https://i.imgur.com/XD317.png)
- (void)drawRect:(CGRect)rect {
CGImageAlphaInfo alphaInfo = kCGImageAlphaNone;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
size_t components = CGColorSpaceGetNumberOfComponents(colorSpace);
size_t width = 100;
size_t height = 100;
size_t bitsPerComponent = 8;
size_t bytesPerComponent = bitsPerComponent/8;
size_t bytesPerRow = width * bytesPerComponent * components;
size_t dataLength = bytesPerRow * height;
uint8_t data[dataLength];
CGContextRef imageCtx = CGBitmapContextCreate(&data, width, height, bitsPerComponent,
bytesPerRow, colorSpace, alphaInfo);
NSUInteger offset = 0;
for (NSUInteger y = 0; y < height; ++y) {
for (NSUInteger x = 0; x < bytesPerRow; x += components) {
CGFloat opposite = y - height/2.;
CGFloat adjacent = x - width/2.;
if (adjacent == 0) adjacent = 0.001;
CGFloat angle = atan(opposite/adjacent);
data[offset] = abs((cos(angle * 2) * 255));
offset += components * bytesPerComponent;
}
}
CGImageRef image = CGBitmapContextCreateImage(imageCtx);
CGContextRelease(imageCtx);
CGColorSpaceRelease(colorSpace);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect buttonRect = CGRectMake(100, 100, width, width);
CGContextAddEllipseInRect(ctx, buttonRect);
CGContextClip(ctx);
CGContextDrawImage(ctx, buttonRect, image);
CGImageRelease(image);
}
Nguồn
2011-08-02 05:21:14
Nhìn vào vòng lặp của bạn, có vẻ với tôi như nó sẽ là khá đơn giản để dịch cho một lõi hình ảnh hạt nhân có thể tạo ra một vô cùng lớn hình ảnh của gradient bạn đã cho thấy. –
Đồng ý, nhưng OP yêu cầu liên lạc cacao không hỗ trợ bộ lọc hạt nhân CI. Trên Mac, Core Image chắc chắn sẽ hữu ích ở đây. –
Giả thuyết, nếu phiên bản iOS tiếp theo xảy ra để hỗ trợ Core Image (và tôi không nói nó sẽ), điều này sẽ bao gồm các bộ lọc hạt nhân cần thiết, hoặc là một cái gì đó mà sẽ duy trì nghiêm ngặt máy tính để bàn chỉ? –