我正在努力加快我的绘图代码。而不是创建图形上下文,将当前图像绘制到其中,并绘制它,我正在尝试使用一些像素数据创建上下文,并直接修改它。问题是,我对核心图形很新,我无法创建初始图像。我只想要一个坚实的红色图像,但我一无所获。这是我用于初始图像的内容。我认为问题与其余代码相同。
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);
答案 0 :(得分:1)
对于初学者来说,您所绘制的上下文似乎与UIGraphics“当前图像上下文”无关。你在某个地方打电话给UIGraphicsBeginImageContext(CGSize size)
吗?
不确定能否满足您的需求,但这肯定意味着您不太可能将nil
作为当前图像上下文。