我試圖加快我的繪圖代碼。不是創建圖形上下文,而是繪製當前圖像並繪製它,然後使用一些像素數據創建上下文,並直接修改該上下文。問題是,我對核心圖形非常新,而且我無法創建初始圖像。我只想得到一個穩固的紅色圖像,但我什麼也沒得到。以下是我用於初始圖像的內容。我認爲這個問題和其他代碼一樣。從Core Graphics上下文創建可重複使用的圖像不會給我帶來什麼
pixels = malloc(320*460*4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixels, 320, 460, 8, 4*320, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
CGContextAddRect(context, CGRectMake(0, 0, 320, 460));
CGContextFillPath(context);
trace = [[UIImageView alloc] initWithImage:UIGraphicsGetImageFromCurrentImageContext()];
CGContextRelease(context);
編輯:UIGraphicsGetImageFromCurrentImageContext()
原來是這個問題。一個工作的解決方案如下,但是請注意,這是沒有快於簡單得多UIGraphicsBeginImageContext()
pixels = malloc(320*460*4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(pixels, 320, 460, 8, 4*320, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextAddRect(context, CGRectMake(0, 0, 320, 460));
CGContextFillPath(context);
CGDataProviderRef dp = CGDataProviderCreateWithData(NULL, pixels, 320*460*4, NULL);
CGImageRef img = CGImageCreate(320, 460, 8, 32, 4*320, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big, dp, NULL, NO, kCGRenderingIntentDefault);
trace = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:img]];
CGImageRelease(img);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
你真的應該在運行時得到應用程序窗口空間的矩形(即屏幕減去狀態欄),而不是硬編碼零原點和320×460尺寸。首先,您的代碼無法處理風景(例如,480×300)屏幕。另一方面,您的應用可以自動處理更大的屏幕尺寸(例如,在平板電腦上)。您可能需要使用' - [UIScreen applicationFrame:]':http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen.html#//apple_ref/occ/ instp/UIScreen/applicationFrame – 2010-01-20 04:24:45