2012-04-27 54 views
0
//Now it is thread safe. 
    CGSize scaledSize = CGSizeMake(ceil(self.size.width * scaleRatio), ceil(self.size.height * scaleRatio)); 
    CGImageRef imageRef = self.CGImage;  

    //The output context. 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
    CGContextRef context = CGBitmapContextCreate(NULL, 
               (int)scaledSize.width, 
               (int)scaledSize.height, 
               8, 
               (int)(4 * scaledSize.width), 
               colorSpace, 
               kCGImageAlphaPremultipliedLast); 


//Percent (101%)  
#define SCALE_OVER_A_BIT 1.01 

    //Scale. 
    CGContextScaleCTM(context, scaleRatio * SCALE_OVER_A_BIT, scaleRatio * SCALE_OVER_A_BIT); 
    CGContextDrawImage(context, CGRectMake(0.0, 0.0, scaledSize.width, scaledSize.height), imageRef); 

    CGImageRef scaledImageRef = CGBitmapContextCreateImage(context);  
    UIImage *scaledImage = [UIImage imageWithCGImage:scaledImageRef];  

    CGColorSpaceRelease(colorSpace);  
    CGImageRelease(imageRef); 
    CGImageRelease(scaledImageRef);  
    CGContextRelease(context); 

    return scaledImage; 

它說:這個CGBitmapContext有什麼問題?

CGBitmapContextCreate:不支持的參數的組合:8個整數位/分量; 32位/像素; 3分量色彩空間; kCGImageAlphaPremultipliedFirst; 450字節/行。

我應該改變什麼?我看不出問題在哪裏。 我是否必須創建一個4分量色彩空間?這是什麼工廠?

+0

似乎沒什麼'。如何克服這一點? – Geri 2012-04-27 11:24:58

回答

0
BytesPerRow == 450 == 112.5 values per row… 

然而,scaledSizeceil「適當的主編 - 你修改這些值它們在實際程序初始化之後?

+0

你實際上原始圖像是450x600像素,這裏的縮小比例爲0.25。 – Geri 2012-04-27 13:22:58

+0

@Geri你也可以嘗試0 - 實現可能推斷出值 – justin 2012-04-27 13:25:01

+0

在後臺線程中調用該方法,可能是由此引發的問題。如何使它更安全線程呢? – Geri 2012-04-27 13:30:03