代码之家  ›  专栏  ›  技术社区  ›  David Kanarek

从核心图形上下文创建可重用的图像不会给我任何帮助

  •  1
  • David Kanarek  · 技术社区  · 15 年前

    我正在努力加快我的绘图代码。我试图用一些像素数据创建一个上下文,并直接修改它,而不是创建一个图形上下文、将当前图像绘制到其中并覆盖它。问题是,我对核心图形还很陌生,无法创建初始图像。我只想要一个纯红色的图像,但我什么也得不到。这是我用于初始图像的内容。我假设其余代码的问题是相同的。

    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);
    
    1 回复  |  直到 13 年前
        1
  •  1
  •   Ben Zotto sberry    15 年前

    对于初学者来说,您要绘制的上下文似乎与uigraphics的“当前图像上下文”无关。你打电话来了吗? UIGraphicsBeginImageContext(CGSize size) 在什么地方?

    不确定这能满足你的需要,但这肯定意味着你不太可能得到 nil 返回当前图像上下文。