2011-11-26 54 views
0

CoreGraphics相當新穎,但卻掌握了基礎知識。試圖寫入外部文件(而不是電話的屏幕)。所有網格出現,但不會使用drawAtPoint呈現文本。無論我嘗試什麼,只是不做!文本不會出現在外部位圖/ jpeg文件中。 Drawatpoint在當前上下文中不起作用?

這裏是我的代碼,它發射時的viewDidLoad:

- (void)viewDidLoad { 

    CGFloat width = 312; 
    CGFloat height = 482; 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

    size_t bitsPerComponent = 8; 
    size_t bytesPerPixel = 4; 
    size_t bytesPerRow  = (width * bitsPerComponent * bytesPerPixel + 7)/8; 
    size_t dataSize   = bytesPerRow * height; 

    unsigned char *data = malloc(dataSize); 
    memset(data, 0, dataSize); 

    CGContextRef context = CGBitmapContextCreate(data, width, height, 
               bitsPerComponent, 
               bytesPerRow, colorSpace, 
               kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

    // Flip coordinate system 
    CGRect bounds = CGContextGetClipBoundingBox(context); 
    CGContextScaleCTM(context, 1.0, -1.0); 
    CGContextTranslateCTM(context, 0.0, -bounds.size.height); 

    // And now the magic happens... 

    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0); 
    CGContextFillRect(context, CGRectMake(0,0,312,482)); 

    int tableTop=54; 
    int cellsPerColumn=26; 
    int cellHeight=15; 

    [@"Title" drawAtPoint:CGPointMake(8, 8) withFont:[UIFont boldSystemFontOfSize:9.0f]]; // Doesn't print text on screen?! 

    for(int a=1;a<cellsPerColumn+1;a++) 
    { 
     CGContextStrokeRect(context, CGRectMake(8,(tableTop+cellHeight*(a+1)),60,cellHeight)); 
     CGContextStrokeRect(context, CGRectMake(66,(tableTop+cellHeight*(a+1)),85,cellHeight)); 
     CGContextStrokeRect(context, CGRectMake(159,(tableTop+cellHeight*(a+1)),60,cellHeight)); 
     CGContextStrokeRect(context, CGRectMake(217,(tableTop+cellHeight*(a+1)),85,cellHeight)); 
    } 



    // Wrap up context and produce the image... 



    CGColorSpaceRelease(colorSpace); 
    CGImageRef imageRef = CGBitmapContextCreateImage(context); 
    UIImage *result = [[UIImage imageWithCGImage:imageRef] retain]; 
    CGImageRelease(imageRef); 
    CGContextRelease(context); 

    free(data); 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"user_images/myImage.jpg"]; 

    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(result)]; 
    [imageData writeToFile:filePath atomically:YES]; 
    [super viewDidLoad]; 
} 

我撕我的頭髮就這一個,它有這樣的東西有關設置與上下文來渲染文本或簡單的東西像那樣。任何幫助非常感謝!

感謝, 豐富

回答

0

實用的方法,如drawAtPoint:只對當前的圖形上下文中繪製工作,一般情況下一個子類的NSView的drawRect這個回調過程中提供。或者,您可以使用您創建的位圖上下文嘗試setCurrentContext:方法。

+0

好的,謝謝你的回答,但讓我想,也許我會這樣做的所有錯誤的方式。 我試圖使用NS實用程序命令(如drawAtPoint)在手機上生成圖像以包含繪圖對象,圖像和文本。這個文件的尺寸超出了屏幕的範圍,文件需要以編程方式和幕後製作,因此用戶不需要看到它。我也想控制結果圖像的分辨率(pref 300dpi)。 必須有一個簡單的方法來做到這一點?任何幫助不勝感激。 Regards, Rich –

相關問題