用CGImage绘制图像?

时间:2010-08-06 13:17:50

标签: cocoa

我有我的CGImageRef,我想通过我的NSView显示它。但是这段代码似乎不起作用,我已经从源路径获得了CGImageRef。这是我的代码:

- (void)drawRect:(NSRect)rect {

NSString *   thePath = [[NSBundle mainBundle] pathForResource: @"blue_pict"
                                                    ofType: @"jpg"];
NSLog(@"the path : %@", thePath);

CGImageRef myDrawnImage = [self createCGImageRefFromFile:thePath];

NSLog(@"get the context");
CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext]     graphicsPort];
if (context==nil) {
    NSLog(@"context failed");
    return;
}

//get the bitmap context
CGContextRef myContextRef = CreateARGBBitmapContext(myDrawnImage);

//set the rectangle
NSLog(@"get the size for imageRect");
size_t w = CGImageGetWidth(myDrawnImage);
size_t h = CGImageGetHeight(myDrawnImage);
CGRect imageRect = {{0,0}, {w,h}};
NSLog(@"W : %d", w);

myDrawnImage = CGBitmapContextCreateImage(myContextRef);

NSLog(@"now draw it");
CGContextDrawImage(context, imageRect, myDrawnImage);

char *bitmapData = CGBitmapContextGetData(myContextRef);

NSLog(@"and release it");
CGContextRelease(myContextRef);
if (bitmapData) free(bitmapData);
CGImageRelease(myDrawnImage);

}

代码有什么问题吗?

  • 谢谢&注意 -

2 个答案:

答案 0 :(得分:4)

CGImageRef myDrawnImage = [self createCGImageRefFromFile:thePath];

现在你有了你的形象。

CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext]     graphicsPort];

现在你有了你的观点的背景。您拥有绘制图像所需的一切。

CGContextRef myContextRef = CreateARGBBitmapContext(myDrawnImage);

等等,什么?

myDrawnImage = CGBitmapContextCreateImage(myContextRef);

O ... kay ...现在你已经捕获了没有任何内容的上下文内容,通过用空白图像替换它来忘记(和泄漏)你加载的图像。

CGContextDrawImage(context, imageRect, myDrawnImage);

您绘制空白图像。

剪切创建位图上下文并创建该上下文内容的图像,然后将您加载的图像绘制到视图的上下文中。

或使用NSImage。那将是一个双线。

答案 1 :(得分:1)

是的,你实际上并没有画出图像。您需要做的就是使用CGContextDrawImage而不是创建空的位图上下文。