我是新来的客观C. 我想画(到现在为止的基本线)到位图上,然后在屏幕上呈现Iphone的位图。如何绘制位图并使用Objective C将其粘贴到屏幕上?
以下是我试过的代码,它表明我只是一个空白屏幕:
- (void)drawRect:(CGRect)rect
{
CGContextRef screen = UIGraphicsGetCurrentContext();
size_t width = rect.size.width;
size_t height = rect.size.height;
void *data = malloc(width*height*4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef c = CGBitmapContextCreate(data, width, height, 8, width*4, colorSpace, kCGImageAlphaPremultipliedFirst);
CGFloat black[4] = {0.0f,0.0f,0.0f,1.0f}; // setting the color in CMYK format
CGContextSetStrokeColor(c, black);
CGContextBeginPath(c);
CGContextMoveToPoint(c, 5.0f, 5.0f);
CGContextAddLineToPoint(c, 50.0f, 50.0f);
CGContextAddLineToPoint(c, 100.0f, 60.0f);
CGContextMoveToPoint(c, 100.0f, 100.0f);
CGContextAddLineToPoint(c, 50.0f, 150.0f);
CGContextStrokePath(c);
CGImageRef img = CGBitmapContextCreateImage(c);
CFRelease(c);
free(data);
CGContextDrawImage(screen, rect, img);
CGContextFlush(screen);
CGContextFlush(c);
CFRelease(colorSpace);
CGImageRelease(img);
CFRelease(screen);
}
让我知道,如果有人能指出一个类似的例子或建议改变我的代码。
感谢您的帮助大家... 代码工作,但并不如预期。
我修改了代码如下:
CGContextSetRGBFillColor(screen, 1.0, 1.0, 1.0, 1.0); //code works without these 3 lines
CGContextFillRect(screen, rect);
CGContextDrawImage(screen, rect, img);
但有一些奇怪的事情发生,我可以看到当我提供的颜色是绿色的黑线绘制。 下面是创建位图上下文之后代码:
CGFloat black[4] = {0.0f,1.0f,0.0f,1.0f}; //RGB values
CGContextSetStrokeColor(c, black);
这似乎是它的代码工作的唯一组合...
没有人有任何线索?
嗨Quixoto, 我能够通过使用UIGraphicsGetCurrentContext只画,但我希望做一个位图并对其进行渲染。 默认背景是白色,我可以看到一个空白的白色屏幕,所以我相信我不需要在整个上下文中做一个矩形填充。我想代码: 我认为代码: CGImageRef img = CGBitmapContextCreateImage(c); 应该得到CGImageRef img上下文c上的图纸,但我想这就是什么没有发生。 谢谢 – R3D3vil 2011-03-31 15:21:45
你知道任何其他方式或有一个iphone位图绘制的例子吗? – R3D3vil 2011-03-31 15:40:28
@Nisarg:请参阅我的所有评论。你的方法应该没问题,但还有其他一些考虑因素。除非清除/填充它,否则您的位图上下文是垃圾数据。别的东西可能会导致你看不到。 – 2011-03-31 15:53:24