我有我的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);
}
代码有什么问题吗?
答案 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
而不是创建空的位图上下文。