我有一个PNG图像具有不受支持的位图图形上下文像素格式.每当我尝试调整图像大小时,都会CGBitmapContextCreate()以不支持的格式进行扼流  
我收到以下错误(格式错误,以方便阅读):
CGBitmapContextCreate: unsupported parameter combination: 
    8 integer bits/component; 
    32 bits/pixel; 
    3-component colorspace; 
    kCGImageAlphaLast; 
    1344 bytes/row.
在支持的像素格式列表绝对不支持这种组合.看来我需要重绘图像并将alpha通道信息移动到kCGImageAlphaPremultipliedFirst或kCGImageAlphaPremultipliedLast.
我不知道该怎么做.
PNG文件没有任何异常,并且没有损坏.它在所有其他环境中工作得很好.我偶然遇到这个错误,但显然我的用户可能有类似格式的文件,所以我必须检查我的应用程序的导入图像并纠正这个问题.
我刚刚将Xcode从版本4.6.2更新到5.0,在我的项目中执行一个方法(在Xcode 4.6.2中创建)后突然发出编译器警告.我已经尝试在新旧版本的Xcode中重新打开该项目,并且我已经确认相同的方法在4.6.2中没有给出警告.
以下是在Xcode 5.0中引发警告的代码行:
CGContextRef context = CGBitmapContextCreate(NULL, frame.size.width * scaleFactor, frame.size.height * scaleFactor, 8, frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst);
警告说:
"Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitMapInfo' (aka 'enum CGBitMapInfo')"
它似乎不是弃用警告,但我对这些类不太熟悉,无法解释其含义或知道如何解决它.任何帮助表示赞赏.
我迫切需要创建一个没有alpha通道的CGContextRef.不幸的是,使用Core Graphics,您无法使用CGBitmapCreateContext指定kCGImageAlphaNone.
有人可以发布一个工作示例,说明如何创建一个没有alpha通道的CGContextRef?
我需要这个的原因是因为我最终试图调用CGImageCreateWithMaskingColors,当然,如果提供的CGImageRef具有alpha通道,它将无法工作.
请发一个实例.如果你这样做,你可以津津乐道,因为你将处于最前沿,并且将成为第一个这样做的人!请发帖!
我原来的问题:
我正在创建一个简单的绘图应用程序,需要能够绘制我现有的,先前绘制的内容
drawRect.在不完全替换现有内容的情况下绘制现有内容的正确方法是什么?
根据这里和其他地方收到的答案,这是交易.
您应该准备好在drawRect
调用时重绘整个矩形.  
您无法通过执行以下操作来阻止内容被删除:
[self setClearsContextBeforeDrawing: NO];
这仅仅是对图形引擎的暗示,没有必要让它为您预先清除视图,因为您可能需要重新绘制整个区域.它可能会阻止您的视图被自动删除,但您不能依赖它.
要在不擦除的情况下在视图上绘制,请将绘图绘制到屏幕外位图上下文(系统永远不会清除它).然后在您drawRect的屏幕外缓冲区中复制到视图.
例:
- (id) initWithCoder: (NSCoder*) coder {    
     if (self = [super initWithCoder: coder]) {
         self.backgroundColor = [UIColor clearColor];
         CGSize size = self.frame.size;
         drawingContext = [self createDrawingBufferContext: size];
     }
     return self;
 }
- (CGContextRef) createOffscreenContext: (CGSize) size  {
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedLast);
    CGColorSpaceRelease(colorSpace);
    CGContextTranslateCTM(context, 0, size.height);
    CGContextScaleCTM(context, 1.0, -1.0); …是否真的如果它在UIKit,包括drawRect,Retina显示器的高清方面是自动处理?那么这意味着drawRect,1024 x 768视图的当前图形上下文实际上是2048 x 1536像素的位图上下文?
(更新:如果我使用当前上下文创建图像drawRect并打印其大小:
CGContextRef context = UIGraphicsGetCurrentContext();
CGImageRef image = CGBitmapContextCreateImage(context);
NSLog(@"width of context %i", (int) CGImageGetWidth(image));
NSLog(@"height of context %i", (int) CGImageGetHeight(image));
然后在新的iPad上,状态栏被禁用,打印2048和1536,iPad 2将显示1024和768)
我们实际上享受为我们自动处理1点= 4像素的奢侈品.
但是,如果我们使用CGBitmapContextCreate,那么那些将是像素,而不是点?(至少如果我们为该位图提供数据缓冲区,缓冲区的大小(字节数)显然不是用于更高的分辨率,而是用于标准分辨率,即使我们NULL作为缓冲区传递以便CGBitmapContextCreate为我们处理缓冲区,大小可能与传入数据缓冲区相同,而且只是标准分辨率,而不是Retina的分辨率.
我们总是可以为iPad 1和iPad 2以及新iPad创建2048 x 1536,但它会浪费内存,处理器和GPU功能,因为它只需要新iPad.
那么我们是否必须使用a if () { } else { }来创建这样的位图上下文,我们如何实际这样做呢?并且我们所有的代码CGContextMoveToPoint都必须针对Retina显示器进行调整才能使用x * 2,y * 2而非视网膜显示器也只需使用x, y?这对代码来说可能非常混乱.(或者我们可以定义一个局部变量scaleFactor,并设置它[[UIScreen mainScreen] scale]所以它是1标准分辨率和2如果是视网膜,所以我们x并 …
在什么情况下CGBitmapContext无法分配?我有一个表视图,它有多个视图选项.用户可以看到只有预览的小表格单元格,每行一个更大的预览,或每行两个并排预览.前两个渲染得很好,但第三个失败了.CGBitmapContextCreate没有错误消息,只是在我尝试使用它时出现错误(即无效的上下文0x0).
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
//size is a passed parameter
CGContextRef c = CGBitmapContextCreate(NULL, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaNoneSkipLast);
CGColorSpaceRelease(colorSpace);
我的目标是iOS 5.0,使用5.1构建.工作版和非工作版之间的唯一区别是非工作版本尝试两次(尺寸小,小于100x100). 只有右侧有这个问题(即第二次尝试).第一次尝试仍然有效.
在我的应用程序中,我需要调整大小并裁剪一些本地和在线存储的图像.我正在使用Trevor Harmon的教程实现UIImage+Resize.
在我的iPhone 4(iOS 4.3.1)上一切正常,我没有问题.但是在我的iPhone 3G(iOS 3.2)上,调整大小和裁剪方法对任何图片都不起作用(本地存储的是PNG).这是控制台输出:
Tue Apr  5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate:     unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr  5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr  5 02:34:44 Andreis-MacBook-Pro.local Puzzle[12453] <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 32 bits/pixel; 3-component color space; kCGImageAlphaLast; 288 bytes/row.
Tue Apr  5 …Apple技术说明QA1037说"要创建一个仅限alpha的位图上下文,只需为colorspace参数传递NULL."
但是,我不确定要为bitmapInfo参数传递什么.
我正在尝试这样的事情,使用kCGImageAlphaOnly:
CGContextRef ctx = CGBitmapContextCreate(NULL, scaledSize.width, scaledSize.height, 8, scaledSize.width, NULL, kCGImageAlphaOnly);
但这给了我一个关于枚举错误的警告.我应该把它放在那里呢?
我正面临崩溃并出现以下错误:
"CGDataProviderCreateWithCopyOfData:vm_copy失败:状态1."
我有很多问题,你可以提供帮助.
vm_copy中状态1代表什么失败?
仅当我在数据副本的内部for循环中设置断点时才会发生此崩溃.然后恢复并删除断点.如果没有断点,则执行函数但是我得到一个空白图像.即使我没有设置断点,如何捕获此类崩溃并且应用程序停止执行,我如何确保?
执行CGBitmapContextCreateImage时会出现此错误.有谁知道如何解决这个问题?
-(UIImage *) convertBitmapRGBA8ToUIImage:(UInt8**)img 
                                    :(int) width
                                    :(int) height 
{
CGImageRef inImage = m_inFace.img.CGImage;
UInt8*piData = calloc( width*height*4,sizeof(UInt8));
int iStep,jStep;
for (int i = 0; i < height; i++) 
{
    iStep = i*width*4;
    for (int j = 0; j < width; j++) 
    {
        jStep = j*4;
        piData[iStep+jStep] =img[i][j];
        piData[iStep+jStep+1] =img[i][j];
        piData[iStep+jStep+2] = img[i][j];
    }
}
CGContextRef ctx = CGBitmapContextCreate(piData,
                                         CGImageGetWidth(inImage),  
                                         CGImageGetHeight(inImage),  
                                         CGImageGetBitsPerComponent(inImage),
                                         CGImageGetBytesPerRow(inImage),  
                                         CGImageGetColorSpace(inImage),  
                                         CGImageGetBitmapInfo(inImage) 
                                         ); 
CGImageRef imageRef = CGBitmapContextCreateImage(ctx);  
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx); …我有以下代码:
let ref:CGContextRef = CGBitmapContextCreate(nil , 200, 130, CGImageGetBitsPerComponent(self.CGImage), 0, CGImageGetColorSpace(self.CGImage), CGImageGetBitmapInfo(self.CGImage))
问题是我收到此错误:
表达式不符合'NilLieralConvertible'类型
对于第一个参数,我应该传递什么而不是nil?为什么?