R3D*_*vil 1 iphone bitmap objective-c
我是Objective C的新手.我正在尝试将(现在的基本行)绘制到位图上,然后在屏幕上为Iphone绘制位图.
以下是我试过的代码,它只显示空白屏幕:
- (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);
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以指出类似的示例或建议更改我的代码,请告诉我.
感谢大家的帮助......代码可以工作,但不是预期的.
我修改了代码如下:
CGContextSetRGBFillColor(screen, 1.0, 1.0, 1.0, 1.0); //code works without these 3 lines
CGContextFillRect(screen, rect);
CGContextDrawImage(screen, rect, img);
Run Code Online (Sandbox Code Playgroud)
但是有一些奇怪的事情发生了,当我提供的颜色为绿色时,我可以看到画出的黑线.以下是创建位图上下文后的代码:
CGFloat black[4] = {0.0f,1.0f,0.0f,1.0f}; //RGB values
CGContextSetStrokeColor(c, black);
Run Code Online (Sandbox Code Playgroud)
这似乎是代码工作的唯一组合......
有没有人有任何线索?
首先,你可能知道,但你在这里做了一个额外的步骤.虽然从概念上讲这种方法是有效的,但它drawRect:
会获得一个隐含的图形上下文(你知道如何使用它UIGraphicsGetCurrentContext
),你可以直接绘制它.之后无需创建位图上下文然后将其blit到本地上下文中.
也就是说,您的代码通常看起来很合理.然而,你在绘制黑色而没有将背景清除为其他任何东西,这可能解释了全黑的结果.(基础位图只是来自malloc的未初始化的内存,除非你做一个明确的清除或填充它.)尝试对整个上下文进行矩形填充为白色等.
其他几点说明:
rect
矩形内画画.这可能在您的代码中很好,但请注意,此参数可以是视图边界的任何子矩形.如果您打算将图像blit到整个视图中,则应忽略该rect
参数,并将其[self bounds]
用作绘图矩形. 归档时间: |
|
查看次数: |
2691 次 |
最近记录: |