【发布时间】:2012-05-31 23:33:25
【问题描述】:
是否有人为 CGContext 函数组创建了包装类?
我昨天创建了一个简单的 Gradient 类,它封装了 CGGradient 功能的子集,以简化内存管理。这很简单。但是显然还有很多 CGContext 操作,我不确定我是否想在那里重新发明轮子。
基本上我正在寻找的是......
@interface CGContext : NSObject
{
CGContextRef context;
}
+ (CGContext *) bitmapContextWithData:(void *)data
width:(size_t)width
height:(size_t)height
bitsPerComponent:(size_t)bitsPerComponent
bytesPerRow:(size_t)bytesPerRow
colorspace:(CGColorSpaceRef)colorspace
bitmapInfo:(CGBitmapInfo)bitmapInfo;
- (void) saveGState;
- (void) restoreGState;
- (void) setBlendMode:(CGBlendMode)mode;
- (void) addLineToPoint:(CGPoint)point;
- (void) addLineToPointX:(CGFloat)x pointY:(CGFloat)y;
- (void) drawImage:(CGImageRef)image rect:(CGRect)rect;
- (void) concatCTM:(CGAffineTransform)transform;
- (CGAffineTransform) getCTM;
@end
等等。
(我 99% 的绘图都是在屏幕外的位图中进行的,这就是我在这种情况下关心内存管理的原因。如果我总是在当前 UI 图形上下文(例如活动屏幕)中绘图,那么我不会'真的找不到一个非常有用的包装类。)
【问题讨论】:
-
您使用的是 Mac 还是 iOS? Mac 有 NSGradient、NSBitmapImageRep、NSAffineTransform 和 NSGraphicsContext。
-
何必呢?通常像这样的瘦包装类是浪费时间。它们是很多无聊的代码,没有做任何实际工作,只是打乱了争论。更高层次的抽象可能更有用。
-
UIBezierPath 已经包裹了 CGPath。
-
这让我开始思考如何改进 CGBitmapContext API(尤其是
CGBitmapContextCreate),而不是仅仅用 Objective-C 语法重新声明它。我把它写下来了:boredzo.org/blog/archives/2012-06-01/… 谢谢你的灵感。 -
抛开状态管理不谈,我希望这样做只是为了删除多余的、令人眼花缭乱的“CGContext”前缀,这些前缀会乱扔原本简单的绘图配方。
标签: objective-c core-graphics quartz-2d